当前位置: 首页 > 面试题库 >

角度指令可以将参数传递给指令属性中指定的表达式中的函数吗?

景品
2023-03-14
问题内容

我有一个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,可以在任何组件或元素上工作。