我有一个form指令,它使用callback
带有隔离范围的指定属性:
scope: { callback: '&' }
它位于一个内部,ng-repeat
因此我传递的表达式包括id
该对象的作为回调函数的参数:
<directive ng-repeat = "item in stuff" callback = "callback(item.id)"/>
完成指令后,它会$scope.callback()
从其控制器函数中调用。在大多数情况下,这很好,这就是我想要做的,但是有时我想从directive
自身内部添加另一个参数。
是否有一个允许这样的角度表达式:$scope.callback(arg2)
,导致用callback
调用arguments = [item.id, arg2]
?
如果没有,最整洁的方法是什么?
我发现这可行:
<directive
ng-repeat = "item in stuff"
callback = "callback"
callback-arg="item.id"/>
用
scope { callback: '=', callbackArg: '=' }
和指令调用
$scope.callback.apply(null, [$scope.callbackArg].concat([arg2, arg3]) );
但是我认为这不是特别整洁,它涉及在隔离范围内放入额外的内容。
有没有更好的办法?
此处为Plunker游乐场(已打开控制台)。
如果您声明@ lex82提到的回调,例如
callback = "callback(item.id, arg2)"
您可以使用对象映射在指令范围内调用回调方法,它将正确执行绑定。喜欢
scope.callback({arg2:"some value"});
无需$
parse。看到我的小提琴(控制台日志)http://jsfiddle.net/k7czc/2/
更新 :文档中有一个小例子:
&或&attr-
提供一种在父作用域的上下文中执行表达式的方法。如果未指定attr名称,则假定属性名称与本地名称相同。给定和小部件的作用域定义:{localFn:’&myAttr’},然后隔离作用域属性localFn将指向count
= count +
value表达式的函数包装。通常希望通过表达式将数据从隔离范围传递到父范围,这可以通过将局部变量名称和值的映射传递到表达式包装器fn中来完成。
例如,如果表达式为增量(金额),则可以通过将localFn调用为localFn({amount:22})来指定金额值。
问题内容: 我想知道是否有一种方法可以将参数传递给指令? 我想做的是从控制器添加一个指令,如下所示: 是否可以同时传递一个参数,以便我的指令模板的内容可以链接到一个作用域或另一个作用域? 这是指令: 如果我想使用相同的指令但使用$ scope.title2怎么办? 问题答案: 这是我解决问题的方法: 指示 控制者 现在,我可以通过同一指令使用不同的作用域,并动态附加它们。
问题内容: 看看这个小提琴,我必须更改什么,才能使用我在HTML中定义的参数来评估模板中的表达式?因为我通过了SAVE按钮,所以它应该调用控制器的- function? 我看不出来。感谢帮助! 问题答案: 您可以按照Roy的建议设置两种方式的数据绑定。因此,如果您既想要又绑定到本地范围,则可以 由于要传递这些值,因此可以在指令的控制器中访问它们。但是,如果您想在父作用域的上下文中运行一个函数,这似
问题内容: 我试图将回调函数从控制器传递给指令。 这是回调函数代码: 指令用法: 指令代码: 模板中的回调用法: 但是,这给了我以下错误: 我看过很多类似的问题,但不明白我在哪里错了。 问题答案: 从指令中调用表达式方法时,您需要以格式传递指令中的参数,还应更正指令属性值以像 指令用法: 指令模板
问题内容: 我创建了这个小提琴来显示我的问题… http://jsfiddle.net/dQDtw/ 我正在将一个新创建的数组传递给指令,并且一切正常。但是,在控制台窗口中出现错误,指示: 对我需要按摩以清洁它的任何想法吗?我希望能够重用指令,而无需更新控制器。 这是HTML 这是JS。 var myApp = angular.module(’myApp’,[]); 问题答案: 该错误是因为您的指
问题内容: 通过指令的属性将数组传递给指令时,我目前遇到问题。我可以将其读取为字符串,但是我需要将其作为数组,所以这是我想出的,但是不起作用。帮助任何人?提前 Javascript :: HTML :: 问题答案: 如果要从您的作用域访问此数组,即加载到控制器中,则只需传递变量名称即可: 指示: 模板:
例如,Angular 2内置的属性指令ngClass和ngStyle,可以在任何组件或元素上工作。