闭包angularjs中的多个控制器

时间:2014-12-23 02:42:09

标签: javascript angularjs

我在闭包中创建了2个控制器:

_closure = (function(){

var _One; 
var _Two;


//register module- left out for brevity

function ctrlOne($scope){

this.model = {
a : 'a'
b:'b'
}

_One = $scope;

}

function ctrlTwo($scope){

this.model = {
c : 'c'
d:'d'
}

_Two = $scope;

}

//assign controllers to module- left out for brevity


var publicMethods = {

saveAll: function(){

// access both the models in this function. 

}


}


})()

我想在我的公共功能中访问模型(因为我目前正在现有框架中改进角度)。我想知道是否正确分配对两个控制器范围的引用?在这里,我只保留了指向$ scope(在_One和_Two中)的指针,然后尝试在SaveAll公共方法中访问它们各自的模型。这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

这有几个问题,我同意New Dev你应该“尽早放弃这个想法”

1)您没有在此IIFE中返回任何内容,因此_closure变量将变为undefined

2)在Angular中,$scope对象是模型,新的$scope被传递到每个控制器函数中。所以你可能会有这样的事情:

angular.module('myApp', [])
.controller('ctrlOne', function($scope){
  $scope.a = 'a';
  $scope.b = 'b';
})
.controller('ctrlTwo', function($scope){
  $scope.c = 'c';
  $scope.d = 'd';
});

3)我不确定您当前是如何将控制器连接到应用程序的,所以也许this.model约定有效,但您通常不会在控制器内部使用关键字this

4)在_One_Two中保留指向两个$范围的指针并不是解决此问题的正确方法。您可以使用provider(服务或工厂)代替公共方法,而不是找到一种方法来维护对该控制器功能之外的特定控制器范围的访问。提供商拥有应用程序的所有业务逻辑,听起来就像您的公共职能所做的那样(即saveAll)。

使用angular进行改造可能非常快 - 但前提是你知道自己在做什么。 Angular确实令人困惑,很难接受,除非你很了解你的工具,否则你会非常笨重。我建议从ng-newsletter's fantastic beginner tutorial

开始