Angularjs:将下划线注入$ scope

ele*_*ead 6 dependency-injection underscore.js angularjs

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

{{_.last([1,2,3,4])}}
Run Code Online (Sandbox Code Playgroud)

...在页面的HTML中.

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

$scope._ = _;
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*wie 5

Angular表达式({{expression}})是针对本地$ scope进行计算的,如果你定义了一个控制器,它就像函数一样是$ scope对象MyCtrl($scope){}.

因此,当您_在表达式中使用时,将_根据$ scope计算,并且由于$ scope.does没有_成员,因此表达式失败.

因此,_在视图中使用的唯一内容是使用以下内容在$ scope对象上使用:$scope._ = _;.


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