嵌入内容中的角度范围修改

Angular scope modification inside transcluded content

提问人:Buchholt 提问时间:4/10/2016 最后编辑:Buchholt 更新时间:4/11/2016 访问量:103

问:

Angular:谁能解释为什么指令中的嵌入内容只能更新作用域上的对象,而不能直接更新作用域上的变量。仅仅是因为对象和函数在 javascript 中是 ref 类型,为什么绑定是单向工作的,并且......为什么在包含的内容中更新后绑定会中断(请参阅 Plunker 示例)

-Plunker 示例 - 作用域上的变量与作用域上的对象

工作 Plunker 示例 - 范围可变-

angularjs using指令 angularjs-ng-transclude

评论


答:

0赞 Manuel Ro 4/10/2016 #1

包含的内容还可以更新父级的范围属性

嵌入的内容与任何其他内容一样,因此,如果按照 ,您将能够更新所需的父范围属性。始终遵循并重构您的逻辑,以确保在 中完成所有操作。dot.ruledot.ruleangular way

指令作用域类型

2.0 之前的 angular 指令接受多种类型的作用域,作用域可以是 ,它创建一个新的作用域并继承父级的属性;,它不会创建新的作用域,但仍继承父级的属性;或者称为独立作用域,这将创建一个具有零属性的新作用域,它仅保留您声明的属性。truefalse{}

单向与双向数据绑定

Angular 同时使用单向和双向数据绑定。例如,当您使用指令时,会发生双向数据绑定,每当您更新模型时,视图都会反映这些更改,反之亦然。另一方面,使用插值时会发生单向数据绑定ng-model{{some.property}}


如果使用 .毕竟,这就是原型继承的工作原理。dot.rule

看看这支来说明这个答案中所说的一切。

评论

0赞 Buchholt 4/10/2016
我知道如果我绑定到像 $scope.person = { name: “” } 这样的对象,它就会起作用 - 但为什么不绑定到像 $scope.personname = “” 这样的变量呢?
0赞 Manuel Ro 4/10/2016
因为原型遗传。Angular 基于 JavaScript,这种行为是由于 JavaScript 本身造成的。通常,最好依靠服务、值和常量来处理作用域之间的共享信息。
0赞 Manuel Ro 4/10/2016
虽然您也可以直接访问父属性并使用 .$parent.myProperty
0赞 Buchholt 4/10/2016
我知道那件事。。。正如凯尔·辛普森(Kyle Simpson)所说:“......JavaScript 不是通过向下复制链来“继承”,而是委托给链上......”
0赞 Buchholt 4/10/2016
似乎向嵌入器添加范围会破坏链 - 如果它是范围 -< 事件上的变量,$parent对此无能为力