Bar*_*amo 22 angularjs angularjs-directive angularjs-scope
有没有办法继承父作用域,同时用传递的属性扩展它?
我想直接从模板将参数传递给可重用的指令,而不必在链接函数中更改DOM.
例如:
<form-input icon="icon-email" label="email" ng-model="data.input"></form-input>
Run Code Online (Sandbox Code Playgroud)
对于这样的指令:
<div class="form-group">
<label>{{label}}</label>
<div class="input-group">
<div class="{{icon}}">@</div>
<input class="form-control" placeholder="Email" ng-model="mail.email">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
ng-model在父作用域中,在这种情况下控制整个表单,但我不认为有必要在控制器中存储样式属性.
有没有一种方法可以直接在模板中传递参数而无需创建隔离范围?
Ang*_*gad 29
您将无法"扩展"父范围.但是,您的目标可以通过使用在指令的link函数中注入的指令标记属性来实现.
所以,例如.为了附加你的label变量,你的指令的链接函数如下所示:
link: function ($scope, $element, $attributes) {
$scope.label = $scope.$eval($attributes.label);
}
Run Code Online (Sandbox Code Playgroud)
您可以查看下面的plunker进行现场演示.
http://plnkr.co/edit/2qMgJSSlDyU6VwdUoYB7?p=preview
Angad的答案适用于静态链接,但如果链接后属性的值可能会更改,则不会更新.如果你需要这个,sollution将把值传递给字符串而不是引用:
<form-input icon="icon-email" label="{{email}}" ng-model="data.input"></form-input>
Run Code Online (Sandbox Code Playgroud)
在该指令中,在属性上添加$ observe以更新范围变量:
$attributes.$observe('label', function(newValue){$scope.label=newValue});
Run Code Online (Sandbox Code Playgroud)
现在,如果属性值发生变化,范围变量将动态变化.
| 归档时间: |
|
| 查看次数: |
15967 次 |
| 最近记录: |