【问题标题】:Pure Controller objects纯控制器对象
【发布时间】:2016-03-16 09:02:41
【问题描述】:

在 AngularJS 中,Controller itself is an objectJavascript 构造函数 定义,此构造函数是 callback to .controller 方法。

var myapp=angular.module('scopeExample', []);
myapp.controller('MyController',function MyController($scope){
  $scope.name="john";
  this.num=700;
}); 

在上面的示例中,MyController 是构造函数,它创建具有一个属性的 Controller 对象 (num)。我对此有三个疑问:

  • 其实这种情况下Controller对象有什么用呢?
  • 它是否还有一些不可见的属性,是否可以从 Angular 外部访问?
  • 它如何与它的作用域互连,而作用域又是另一个对象?

我遇到以下查询是因为 controller as 语法创建了一个控制器对象,该对象是控制器范围的属性,因此易于访问,例如

<div ng-app="scopeExample" ng-controller="MyController as ctrl">
    <input id="box" ng-model="ctrl.num"> equals {{ ctrl.num }}   
</div>

<script> 
angular.module('scopeExample', [])
.controller('MyController', [function () {
     this.num=12;
}]);
</script>     

var x=angular.element('#box').scope().ctrl;    //x is the controller object itself

【问题讨论】:

    标签: angularjs angularjs-controller


    【解决方案1】:

    1.a. 这种情况下Controller对象有什么用?

    这个例子没有什么特别之处,Angular 是一个 MVC 框架(或任何你想使用的描述几乎相同事物的流行词),控制器的职责是响应视图事件,相应地更新模型并执行业务逻辑任务(您可以选择实际实现逻辑的位置、控制器本身的位置或使用服务)。

    当然,在这个例子中,控制器是毫无用处的,因为你没有逻辑,只有两个属性。

    1.b。指定 ctrl-as 语法,在您的示例中,您将“范围”注入控制器并添加属性($scope.name),当您使用控制器时,建议您避免使用范围,除非您有义务这样做所以。 (例如 $watch、父...)

    2.a. 它还有一些不可见的属性吗?

    不,它没有任何不可见的属性,您可以使用以下代码自行轻松检查:

    .controller('MyController', function () { window.DoesThisControllerHaveInvisibleProps = this; });

    2.b。 是否可以从 Angular 外部访问?

    我不确定我是否完全理解您所说的“外部 Angular”是什么意思,如果是这样,下面是一个可以从“外部”访问控制器 obj 的示例:

    class MyController {
        static foo() {
            console.log('hello!');
        }
    }
    
    myapp.controller('MyController', MyController);
    // maybe somewhere else in that module
    MyController.foo();
    

    3.它如何与它的作用域互连,而作用域又是另一个对象?

    正如你所说,当使用控制器作为语法时,角度是初始化控制器并将其放在 $scope 上,以便在模板中可以访问它。

    $scope 只是一种不必要的发光,你应该避免使用它。我的看法就像是角度植入细节,当迁移到 ng-2 时,你会发现没有更多的范围。

    如果您想了解有关 $scope 和角度控制器的工作原理的更详细信息,我建议您 have a look at

    【讨论】:

      猜你喜欢
      • 2014-06-03
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 2016-07-21
      • 2013-01-07
      • 2018-05-24
      • 1970-01-01
      相关资源
      最近更新 更多