Angularjs:将下划线注入$ scope

时间:2013-06-28 14:08:28

标签: angularjs dependency-injection underscore.js

我遇到了一个奇怪的问题,无法在{{}}内部或在ng-repeat和其他表达式中使用下划线函数。我的确切测试功能是

{{_.last([1,2,3,4])}}

...正好在页面的HTML中。

只有在我的控制器中执行此操作时,才能看到正确答案(4):

$scope._ = _;

我尝试将_作为工厂注入我的主应用程序模块,然后将其注入我的控制器,但它似乎并没有将它注入$ scope。

任何人都可以看到我犯的错误吗?或者是否有一种机制可以阻止下划线库进入$ scope?我正在使用angular v.1.0.7和最新版本的下划线(不确定版本号的确切数字,但它是在过去3周内)。

1 个答案:

答案 0 :(得分:5)

Angular表达式({{expression}})是针对本地$ scope进行评估的,如果您定义了控制器,则该函数是MyCtrl($scope){}中的$ scope对象。

因此,当您在表达式中使用_时,_将针对$ scope进行评估,并且由于$ scope.does没有_成员,因此表达式失败

因此,在视图中使用_的唯一方法是在$ scope对象上使用它:$scope._ = _;


顺便说一下,当在浏览器上下文中使用时,下划线将_添加为全局对象,因此它可以在整个JS中使用。这意味着没有必要“注入_作为工厂”。