控制器中本地$ scope函数的正确模式是什么?

Nin*_*ner 0 angularjs angularjs-scope

在我的控制器中,我有几个与$ scope相关的本地函数.随着这个数字的增加,他们现在似乎失控了.构造这些本地控制器功能的正确模式是什么?

例如,

function myController($scope) {
    $scope.func1 = function() {
        // do something with $scope
    }
    $scope.func2 = function() {
        // do something with $scope
    }
    $scope.func3 = function() {
        // do something with $scope
    }

    // ... controller code here ...
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使这些本地func1,func2,func3更易于管理?

Rir*_*ron 5

您可以将控制器定义为类,并使用原型添加功能:

var myController = function($scope){
  var _this = this;

  $scope.func1= function(){
    _this.func1();
  };
};

myController.prototype.func1 = function(){
  // do something here
};

app.controller('myController', myController);
Run Code Online (Sandbox Code Playgroud)

这样你就可以避免"范围汤".有一个关于一个伟大的文章在这里

请注意,您还可以使用"as"关键字来避免$ scope:

<div ng-controller="myController as ctrl">
   <input ng-click="ctrl.func1()">
</div>

var myController = function(){
    this.someVar = "A value";
};
myController.prototype.func1 = function(){
   // do something here
};
Run Code Online (Sandbox Code Playgroud)

  • 这真的能解决问题还是只是移动它?即使它们都只是调用_this.funcx(),你仍然需要在$ scope之外挂起一堆函数.事实上,人们可能会认为这是一个更糟糕的解决方案,因为它通过添加另一个类使事情变得更加复杂. (2认同)