AngularJS 1.4:如何使用bindToController和controllerAs语法创建双向绑定
AngularJS 1.4: How to create two-way binding using bindToController and controllerAs syntax
好吧,这真的让我很困扰。我有一个具有隔离范围的指令,使用controllerAs
语法和bindToController
:
function exampleDirectiveFactory() {
var bindings = {
foo: '=',
bar: '@'
}
return {
bindToController: true,
controller : 'ExampleController',
controllerAs : 'vm',
scope : bindings,
template : 'foo = {{ vm.foo }}<br />bar = {{ vm.bar }}'
};
}
假设使用如下:
<example foo="FOO" bar="BAR"></example>
…我期望vm.foo
的值与foo
属性的值是双向绑定的。而应该是undefined
。
vm.bar
的值等于HTML元素的属性值bar
,这是我所期望的。
当我尝试使用过滤器更改vm.bar
的值时,没有更改持续存在。
当我将vm.bar
的过滤值存储到一个新变量vm.baz
时,它按预期工作。
Here is a fiddle
我的问题有两个部分:
A)为什么使用'='
时vm.foo
的值没有定义?
B)为什么我不能改变控制器范围内vm.bar
的值,即使这种改变不传播到HTML元素属性(它不应该,因为我使用'@'
)?
1.4改变了bindToController的工作方式。尽管angular的文档似乎仍然将该字段称为true
/false
。现在它可以接受一个对象,就像scope
属性一样,其中的属性表明您想要绑定什么以及如何绑定它。
function exampleDirectiveFactory() {
var bindings = {
foo: '=',
bar: '@'
}
return {
bindToController: bindings, //<-- things that will be bound
controller : 'ExampleController',
controllerAs : 'vm',
scope : {}, //<-- isolated scope
template : 'foo = {{ vm.foo }}<br />bar = {{ vm.bar }}'
};
}
此外,在你的小提琴中,FOO是父作用域上的undefined
,所以当它绑定时,它将把undefined
拉到指令的绑定控制器的作用域。
进一步阅读:这个新的bindToController
语法允许的一个主要功能是,指令不是一个孤立的作用域,并且仍然可以识别要绑定的内容。你可以在指令中设置scope为true
,这样就可以有一个新的子作用域,它将继承它的祖先。
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- jQuery语法添加了var
- Javascript未捕获语法错误意外的标识符错误
- 为什么忽略了eval()代码中的语法错误
- 难以访问的JS环境中的语法错误
- 如何告诉MathJax对下标使用替代语法
- Javascript语法向设置发出sessionStorage值
- 使用$scope方法时的ControllerAs语法
- AngularJS类中的引用属性(ControllerAs语法)
- Angular JS使用controllerAs和这个语法与范围或这个变量
- Firebase 3 向数据绑定,采用 ControllerAs 语法
- 访问指令's将范围与“;这个“;使用controllerAs语法
- 如何使用新的controllerAs语法和面向对象控制器在Angular中实现双向绑定
- 如何在AngularJS modal中使用controllerAs语法?的方法
- 如何使用controllerAs语法实时更新另一个angular控制器
- ControllerAs with vm.语法:如何
- 使用controllerAs语法通过$watch指令更改父控制器模型
- 使用ControllerAs语法绑定服务变量,不带$scope
- AngularJS 1.4:如何使用bindToController和controllerAs语法创建双向绑定
- AngularJS:在对象中使用ControllerAs语法定位窗体