我有一个指令元素。在其中我有一个表单,我想设置一些指令的范围属性。像这样:
<trans-dir>
<form role='form' class='form-inline'>
<div class='form-group'>
Select Value:
<label>
<input type='radio' ng-model='data' value='Val1'>Val1
</label>
<label>
<input type='radio' ng-model='data' value='Val2'>Val2
</label>
</div>
</form>
</trans-dir>
我对范围的工作方式感到困惑(尽管我已经阅读了很多关于它的内容):
指令transcludeFn:08
表格范围:05 &lt; ==嗯?
所以,我希望表单设置指令控制器的范围。如果它是相同的范围,那就没问题了。如果它是被转换的范围(08),我可以访问它。没问题。但它是另一个范围 - 05.我可以使用trasnscludedScope遍历它。上一个兄弟,但我真的不知道发生了什么,我不知道这是否合法和确定。
更详细的代码:http://plnkr.co/edit/z70R6W?p=preview
所以我的问题:
答案 0 :(得分:1)
如果没有声明,您的指令将继承其父作用域,因此删除它将简化此操作。
此外,其中一个范围涉及角度:
如果设置&#34;普通变量&#34;在从父母继承范围的子节点中,WON&T; T传播回来 - 它将自己的变量实例化并更新。
$scope.plainString = "derp";
// child will inherit this, but if it gets set in child it will be
// instantiated there as its own variable and won't affect the parent
但是,如果有一个查询作为其中一部分,则该变量将在父级中更改。
$scope.objToQuery = {
value: "derp"
};
// child will inherit this, and when it gets changed there
// e.g. ng-model="objToQuery.value"
// it WILL be changed in the parent
这个对象是你&#34;查询&#34;必须存在于父范围内。
查看此修改过的plunkr:http://plnkr.co/edit/SftstP7L2OJnfLka8OLd?p=preview
这有帮助吗?
答案 1 :(得分:1)
如果您使用ng-transclude
,则无需手动拨打transcludeFn
。当您手动调用它时,您将创建#8范围。它由ng-transclude
自动调用以创建#5。因此,表单范围是转换范围,而不是您手动创建的范围(这就是为什么它没有设置$ watch)。我不确定是否有办法访问ng-transclude
创建的自动生成的转化范围。但是,您可以不使用ng-transclude
,而是手动调用transcludeFn
(就像您已经在做的那样)并手动将克隆元素附加到DOM中。