闭包中的多个控制器 angularjs.

Multiple controllers in a closure angularjs

本文关键字:控制器 angularjs 闭包      更新时间:2023-09-26

>我在闭包中创建了 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 公共方法中访问它们各自的模型。这是正确的方法吗?

这有几个问题,我同意 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中保留指向两个$scopes的指针不是正确的方法。与其找到一种方法来维护对该控制器功能之外的特定控制器作用域的访问,不如使用提供程序(服务或工厂(代替公共方法。提供程序保存应用程序的所有业务逻辑,听起来这就是您的公共函数正在做的事情(即 saveAll(。

用角度改造一些东西可以非常快 - 但前提是你知道你在做什么。Angular真的很混乱,很难上手,除非你非常了解你的工具,否则你会对它们非常笨拙。我建议从ng-newsletter的精彩初学者教程开始