7

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

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

...就在页面的 HTML 中。

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

$scope._ = _;

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

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

4

1 回答 1

5

Angular 表达式 ( {{expression}}) 是针对本地 $scope 进行评估的,如果您定义了一个控制器,它是一个 $scope 对象,就像在 function 中一样MyCtrl($scope){}

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

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


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

于 2013-06-28T14:14:43.007 回答