Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了AngularJS:指令范围继承大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
前言

当我在控制器下声明指令时,例如

<div ng-controller="MyController">
  <my-directive></my-directive>
</div>

该指令认继承该控制器的作用域.这意味着如果控制器定义

$scope.Heaven = "Free Beer"

然后我可以在指令的模板中访问它

{{ Heaven }}

在另一个指令中声明一个指令时,为什么子节点不会像放在控制器中那样继承范围?

<my-parent-directive>
  <my-child-directive>
  </my-child-directive>
</my-parent-directive>

简而言之,如果我为my-parent-directive声明一个控制器函数并在其中写入:

$scope.Heaven = "Free Beer"

认情况下,我的child指令无法访问此指令.这是为什么?
(这假定父级中的“范围:true”,子级中没有范围声明,以及通过“require:’my-parent-directive’要求父级的子级)

示例代码

Directive wrapped in controller
Directive wrapped in directive

在给出答案后修改了问题 – 以下是保留参
Directive wrapped in directive old

解决方法

我正在看codepen上的“ Directive wrapped in directive old”.我认为这是你要解决的问题,但是我不确定,因为你的codepen与你问题中的例子有所不同(这不是批评,只是澄清以防我为你走错路线!)

但是,如果我是正确的(我在其他答案的代码中指的是“Directive wrapped in directive old”):

您已声明myWrapper中的范围是继承的(“scope:true”),因此您在myWrapper中添加到范围的任何属性(例如“$scope.passdown = $attrs.passdown;”)将仅对myWrapper.

您可以从myWrapper中删除“scope:true”以在所有内容之间共享范围(不是一个很好的结构,但它会起作用),如果我理解正确的话,您将解决您的直接问题.或者,您可以将“passdown”属性移动到“父”控制器上的可变对象“$scope.abc = {passdown:”};”例如.然后@L_558_9@myWrapper中的值:“$scope.abc.passdown = $attrs.passdown;”并在插值表达式中将其作为“abc.passdown”访问.

一点背景:

对“child”控制器/指令中的不可变类型的更改将生成属性的副本,并且永远不会在任何其他范围上看到这些更改.

没有范围声明意味着共享范围 – 共享此范围的所有组件也可以看到在范围上进行的任何属性/更改(对于mutablE).趋向于最终得到非常难以维护的紧密耦合的组件.

“scope:true”表示继承范围,对范围所做的任何添加只能在内容范围(即“子”)中可见.对于共享此范围的所有其他组件,父级中可变属性的更改将可见.

“scope:{…}”创建一个独立的范围,并提供一种向父项公开属性的安全方法,并让子项修改这些属性.这种实现工作更多,但最终会得到更易于理解,维护和共享的代码.

我希望这个答案不是太漫无边靠,它可以帮助你解决问题.

大佬总结

以上是大佬教程为你收集整理的AngularJS:指令范围继承全部内容,希望文章能够帮你解决AngularJS:指令范围继承所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。