无法从angularjs应用程序中的javascript函数返回数组列表

时间:2015-06-22 19:46:54

标签: javascript angularjs

这是我在mvc视图中的链接,它通过调用函数调用重定向到详细信息视图。请看下面。

<a href="/Home/Details" class="label label-primary"  ng-click="addTask(c)">View Details</a>

TasksController.js

var lines =[]
$scope.addTask= function(c)
{
    lines.push(c);
    return lines;
}

alert(lines);

由于某种原因,返回值(行)变为null。我无法弄清楚。我想要实现的是,

我将细节从一个视图传递到angularjs app中的另一个视图。

以下编辑(最新)

我变得非常疯狂,无法完成这一点。

Index.cshtml

    <a href="/Home/Details" class="label label-primary" ng-controller="TasksController" ng-model="c" ng-click="addTask(c)">View Details</a>

(c是我的目标,我试图将其传递到下一页)

TaskController.js

app.controller("TasksController", ['$scope' ,'TasksService', function ($scope, TasksService) {
$scope.addTask = function (currObj) {
    var promiseAddTsk = TasksService.addProduct(currObj);
    $scope.products = promiseAddTsk[0].Name;
    console.log($scope.products);
};

}]);

TasksService.js

 var productList = [];

this.addProduct = function (newObj) {
    productList.push(newObj);
    return productList;
};

Details.cshtml

<div ng-app="TasksModule" ng-controller="TasksController">
<div>
    {{products}}
    <span ng-model="products">{{products}}</span>
</div>

我可以看到&#34;姓名&#34;在scope.Products但它没有在details.cshtml中绑定。

2 个答案:

答案 0 :(得分:1)

我建议你创建一个服务。然后,您需要将服务注入每个控制器并使用build in $q service返回承诺。该服务看起来像这样

.factory('Task', function($q) {
var lines = [];

 return {
addTask: function(c) {
    var deferred = $q.defer();
    lines.push(c);
    deferred.resolve(lines);
    return deferred.promise;
}
  };

});

然后你就像这样注入并使用控制器内的服务..

.controller('TasksController', function($scope, Task) {
$scope.addTask = function(c){
    var lines = Task.addTask(c);
    alert(lines);
}
});

答案 1 :(得分:0)

我相信你的HTML中缺少ng-model。

应该是:

<a href="/Home/Details" class="label label-primary"  ng-click="addTask(c)" ng-model="c">View Details</a>

如果是设置任务的地方。如果以表格形式设置,则需要在设置任务的元素上设置ng模型,例如输入字段。

ng-model =“c”应该放在UI上设置任务的任何地方。同样在开始的时候,尝试将逻辑放在一个控制器中,并在概念验证之后将其分开。

<div ng-app="TasksModule" ng-controller="TasksController">

     <a href="/Home/Details" class="label label-primary"  ng-click="addTask(c)" ng-model="c">View Details</a>

     <div>
        {{products}}
        <span ng-model="products">{{products}}</span>
     </div>
</div>

然后“c”或您决定调用的任何内容将作为参数从该元素传递给函数addRask(c)。

您还可以将$ log注入工厂,并将$ log.debug变量注入变量以查看通过控制台设置的内容。

http://www.w3schools.com/angular/angular_directives.asp https://docs.angularjs.org/api/ng/directive/ngModel

编辑:确保正确设置ng-click =“addTask( product )”,从UI传递到角度控制器的变量名称必须与名称相同该模型。您可能必须将标签中的ng-click =“addTask(product)”移动到单独的按钮,并将标记专用于一个任务。

需要注意的是,您使用的是两个不同的控制器 - 任务和详细信息。用于在控制器之间共享数据的服务可以工作,但出于测试目的,请使用Index.cshtml中的相同控制器,就像在Details.cshtml中一样。