在控制器之间传递数据

时间:2014-07-19 08:48:08

标签: angularjs

在我的AngularJS中,我有两个控制器。一个负责处理有关人员的数据。另一个控制器用于处理有关人员数据显示方式的信息:

.controller('PersonCtrl', ['$rootScope', '$scope', function ($rootscope, $scope)
  {
    $scope.Persons = ['John', 'Mike'];
  } ]);


.controller('WidgetCtrl', ['$scope',
    function($scope) {
        $scope.myWidgets = {
            '1': {
                id: '1',
                name: 'Home',
                widgets: [{
                    col: 0,
                    row: 0,
                    sizeY: 1,
                    sizeX: 1,
                    name: "John"
                }, {
                    col: 2,
                    row: 1,
                    sizeY: 1,
                    sizeX: 1,
                    name: "Mike"
                }]
            }
        };

注意在PersonCtrl中,我有两个名字:John和Mike。在WidgetCtrl中,我想将这些名称附加到名称字段(在下面的示例中,我只是键入它,以便显示数据的位置)。我该怎么做?

2 个答案:

答案 0 :(得分:2)

只是为了详细说明评论......您可以使用服务在控制器之间共享数据。看看this video from egghead.io

egghead.io是开始使用angualrjs的绝佳资源。

这就是该服务应该是什么样子

app.service('productService', function() {
  var personList = [];

  var add = function(newObj) {
      personList.push(newObj);
  }

  var get = function(){
      return personList;
  }

  return {
    add: add,
    get: get
  };

});

修改

解决您对如何在小部件中获取姓名的评论

controller('WidgetCtrl', ['$scope', 'PersonService'
    function($scope, personService ) {

      /* init the myWidgets*/

      var count = 0;
      angular.forEach(personService.personList, function(item){
           $scope.myWidgets['1'].widgets[count].name = item.name;
            count = count +1;
      });
}]);

答案 1 :(得分:0)

控制器用于模型(在其$ scope中)与模板之间的中介。有时嵌套控制器是正确的做事方式,即你的WidgetCtrl假定它在PersonCtrl中。在这种情况下,它可以通过范围原型继承来访问父控制器范围成员。

更复杂的方法是使用一种服务来处理从后端获取数据并将其呈现给可能需要它的各种控制器。