在AngularJS中,由 Javascript构造函数定义的Controller itself is an object
,此构造函数是callback to .controller
方法。
var myapp=angular.module('scopeExample', []);
myapp.controller('MyController',function MyController($scope){
$scope.name="john";
this.num=700;
});
在上面的示例中, MyController 是构造函数,它使用一个属性(num
)创建 Controller对象。我有三个问题:
我遇到了以下问题,因为控制器为语法创建了一个控制器对象,该控制器对象是控制器范围的属性,因此可以轻松访问,例如
<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
答案 0 :(得分:1)
1.A。 在这种情况下Controller对象的用途是什么?
这个例子没有什么特别之处,angular是一个MVC框架(或者你想要使用的任何其他流行语来描述几乎相同的东西),控制器的职责是响应视图事件,相应地更新模型并执行业务逻辑任务(您可以选择实际实现逻辑的位置,控制器本身或使用服务)。
当然,在这个例子中,控制器是没用的,因为你没有逻辑,只有2个礼节。
1.B。选择ctrl-as语法,在你的例子中,当你使用控制器时,你将'scope'注入到控制器并添加了属性($ scope.name),因为建议你避免使用scope,除非你有义务做所以。 (例如$ watch,parent ......)
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. 它如何与其范围互连,而范围又是另一个对象?
正如您所说,当使用控制器作为语法时,angular正在初始化控制器并将其放在$ scope上,以便可以在模板中访问它。
$ scope只是一种不必要的光晕,你应该避免使用它。我看待它的方式就像角度植入细节一样,当迁移到ng-2时,你会看到没有更多的范围。
如果您对更详细的信息感兴趣,有关角度范围内的美元范围和控制器是如何工作的,我建议您have a look at