我有一个指令,其中隔离范围的配置如下:
scope: {
title: '@',
icon: '@',
onSelect: '&'
},
当我提供一个简单的表达式时:
<my-component on-select="alert('test')"></my-component>
不评估表达式(不会触发)。
但是,以下方法确实有效:
<my-component on-select="vm.someValue = true"></my-component>
如果我将简单的alert
调用移动到我的控制器中的函数并传递它,它也可以工作:
<my-component on-select="vm.sendAlert()"></my-component>
行为似乎有些不一致。有人能解释表达式绑定的要求吗?
答案 0 :(得分:0)
如JB Nizet所述,角度绑定内的表达式在范围内进行评估。
Angular表达式无法访问全局变量,如窗口,文档或位置。这种限制是故意的。它可以防止意外访问全局状态 - 这是微妙错误的常见来源。
因此,angular只允许您在绑定内部的范围内使用简单的运算符和函数。
答案 1 :(得分:0)
如果你需要将一个函数作为参数传递给一个指令,使得该指令可以调用它,这是我发现使其工作的最好方法。
$scope.myfunction = function(msg) { alert(msg); }
<my-component on-select="myfunction"/>
指令:
scope : { onSelect: '=' } // Notice using '='
scope.doCall = function() { onSelect("some message"); } // Call the passed in function