考虑这个非常简单的Angular Dart组件:
import 'package:angular/angular.dart';
@NgComponent(
selector: 'el',
templateUrl: './component.html',
publishAs: 'ctrl',
map: const {
'foo': '@foo'
}
)
class MyElement {
String foo;
MyElement(Scope scope) {
scope['bar'] = 'bar';
}
}
foo
字段作为属性传递,bar
"字段"添加到构造函数中的scope
。
这允许在视图中使用以下用途:
<div>{{ctrl.foo}}</div>
<div>{{bar}}</div>
foo
前面需要加上ctrl
,但bar
不需要。在这个特定示例中,将字段直接添加到范围似乎是一种糟糕的模式,但是是否有访问组件构造函数中的scope
对象并在其中定义值的常见用例?
简短的回答是"否"。 事实上,组件不需要直接访问 Scope 对象。
这是对AngularJS(1.0,1.2)语法的改进。 在 AngularDart 中,从组件设置显式$watch
以及设置范围属性大多已经过时。
- AngularDart 不是设置范围属性,而是使用
publishAs
注释来设置作用域的属性(前缀为ctrl
)。 - 组件不是监视,而是定义元素属性和类成员之间的映射。
编写指令时,访问Scope
仍然很有用。 例如 ng-repeat
将使用 Scope
对象创建子作用域并设置 $index
属性。