如何在AngularJS中获取Repeated元素的当前子范围?

时间:2014-02-26 11:44:54

标签: javascript angularjs

这似乎是一个简单的问题,但我一直在谷歌搜索一段时间,似乎无法找到它。

在我的JS中,我有一个名为parseTags(book)的东西,它采用JSON逗号分隔的标记列表(book.tags)并将其解析为数组:

$scope.parseTags = function(book){
    book.tags = book.tags.split(',');
};

在我的HTML中,我有类似的东西:

<div ng-repeat="book in books" ng-init="parseTags(book)">{{book.title}}</div>

有没有办法从$scope.parseTags函数中获取子范围?而不是每次传递book

类似的东西:

$scope.parseTags = function($childScope){
     $childScope.tags = $childScope.tags.split(',');
}

<div ng-repeat="book in books" ng-init="parseTags()">{{book.title}}</div>

2 个答案:

答案 0 :(得分:1)

parseTags函数在当前子作用域的上下文中执行。所以parseTags也可以写成:

$scope.parseTags = function() {
    this.book.tags = this.book.tags.split(',');
};

演示:http://plnkr.co/edit/DUkDVOMjjj0khh5KCYo7?p=preview

答案 1 :(得分:0)

当你需要使用ng-repeat的属性时,你应该只对特殊情况使用ng-init,我想你最好在控制器中做这种功能。除非有一个非常具体的原因你不能这样做。我没有看到你在html中使用标签,但看起来像过滤器会做的那种功能。

来自angularjs docs:

  

ngInit的唯一合适用途是对特殊属性进行别名处理   ngRepeat的内容,如下面的演示所示。除了这种情况,你应该   使用控制器而不是ngInit来初始化作用域上的值。

来源:angularjs docs