我遇到了一个奇怪的问题,无法在{{}}内部或在ng-repeat和其他表达式中使用下划线函数。我的确切测试功能是
{{_.last([1,2,3,4])}}
...正好在页面的HTML中。
只有在我的控制器中执行此操作时,才能看到正确答案(4):
$scope._ = _;
我尝试将_作为工厂注入我的主应用程序模块,然后将其注入我的控制器,但它似乎并没有将它注入$ scope。
任何人都可以看到我犯的错误吗?或者是否有一种机制可以阻止下划线库进入$ scope?我正在使用angular v.1.0.7和最新版本的下划线(不确定版本号的确切数字,但它是在过去3周内)。
答案 0 :(得分:5)
Angular表达式({{expression}}
)是针对本地$ scope进行评估的,如果您定义了控制器,则该函数是MyCtrl($scope){}
中的$ scope对象。
因此,当您在表达式中使用_
时,_
将针对$ scope进行评估,并且由于$ scope.does没有_
成员,因此表达式失败
因此,在视图中使用_
的唯一方法是在$ scope对象上使用它:$scope._ = _;
。
顺便说一下,当在浏览器上下文中使用时,下划线将_
添加为全局对象,因此它可以在整个JS中使用。这意味着没有必要“注入_
作为工厂”。