显然有一些基本的东西我还没有理解。
我试图让用户使用角形Ui.Bootstrap中的Modal模块,但我发现我的点击并没有激活open()函数,因此将其简化为一个非常简单的测试用例,如下所示,当ng单击指向一个函数(警报或console.log)时,我没有看到任何调用,但是当ng单击指向只是一个表达式的东西时,它就起作用了。
为什么在第一个示例中没有调用alert?
<div data-ng-app>
<button data-ng-click="alert('Message 1');">
ngClick -- not working, why not?
</button>
<button onclick="alert('Message 2');">
Plain onclick
</button>
<button data-ng-click="count = (count + 1)">
But this works, why ???
</button>
count: {{count}}
</div>http://jsfiddle.net/H2wft/1/
发布于 2014-05-18 18:21:46
ng-click用于当前作用域中的函数(例如,$scope.alert = window.alert将解决不能在该范围内发出警报的问题)或角表达式。它看起来不允许您在其中使用全局范围方法(它可能是在当前的$scope中查找它们,它们是从其中丢失的)。
发布于 2014-05-19 05:02:19
ng-click期望有一个角表达式。在内部,angular正在使用$parse服务来评估ng-click="expression"中的expression。
角表达式与常规javascript代码不一样。$parse使用字符串解析来解释表达式,并将您对变量、函数和对象的访问限制为仅限于$scope对象的属性或任何恰好在典型遗传链上可用的$parent作用域对象的属性。
所以从理论上说,你可以获得这样的全球信息:
$scope.window = window;
$scope.alert = alert;..。然后在模板中执行ng-click="window.alert('hello!')"
...or...ng-click="alert('hello!')"
或者你只需要做一次
$rootScope.window = window;
$rootScope.alert = alert;然后,原型从$rootScope继承的任何作用域也将访问窗口和警报。
..。但是,有充分的理由永远不做上述任何一项,除非可能是为了调试目的。这并不是说装饰$rootScope总是一个坏主意,至少有一种特殊情况,在这种情况下,装饰角度的范围可以完成一些很难做到的事情,否则。
发布于 2014-05-18 18:24:47
不能在ng指令中执行这种代码。他们在您的本地范围内查找内容。
如果在控制器中这样做:
$scope.alert = function(){
alert('alerted!');
};然后在模板中
ng-click="alert()"它将正确执行javascript警报。
https://stackoverflow.com/questions/23725312
复制相似问题