Page 106 - AngularJS权威教程
P. 106
86 第 10 章 指令详解
10.3.3 controllerAs(字符串)
controllerAs参数用来设置控制器的别名,可以以此为名来发布控制器,并且作用域可以访
问controllerAs。这样就可以在视图中引用控制器,甚至无需注入$scope。
例如,创建一个MainController,然后不要注入$scope,如下所示:
angular.module('myApp')
.controller('MainController', function() {
this.name = "Ari";
});
现在,在HTML中无需引用作用域就可以使用MainController。
<div ng-appng-controller="MainControllerasmain">
<input type="text" ng-model="main.name" />
<span>{{ main.name }}</span>
</div>
这个参数看起来好像没什么大用,但它给了我们可以在路由和指令中创建匿名控制器的强大
能力。这种能力可以将动态的对象创建成为控制器,并且这个对象是隔离的、易于测试的。
例如,可以在指令中创建匿名控制器,如下所示:
angular.module('myApp')
.directive('myDirective', function() {
return {
restrict: 'A',
template: '<h4>{{ myController.msg }}</h4>',
controllerAs: 'myController',
controller: function() {
this.msg = "Hello World"
}
};
});
10.3.4 require(字符串或数组)
require参数可以被设置为字符串或数组,字符串代表另外一个指令的名字。 require会将控
制器注入到其值所指定的指令中,并作为当前指令的链接函数的第四个参数。
字符串或数组元素的值是会在当前指令的作用域中使用的指令名称。
scope会影响指令作用域的指向,是一个隔离作用域,一个有依赖的作用域或者完全没有作
用域。在任何情况下,AngularJS编译器在查找子控制器时都会参考当前指令的模板。
如果不使用^前缀,指令只会在自身的元素上查找控制器。
//...
restrict: 'EA',
require: 'ngModel'
//...
指令定义只会查找定义在指令作当前用域中的ng-model=""。
<!-- 指令会在本地作用域查找ng-model -->
<div my-directive ng-model="object"></div>