我正在尝试为我的应用创建一个“喜欢”的功能。我希望能够将动态生成的数字的值设置为“like count”。问题在于使用'ng-init',因为文档说这是一个不好的方法!
如何在'controller'中设置值而不是'view'?
这是我到目前为止所做的:
<!doctype html>
<html ng-app="plunker" >
<head>
<meta charset="utf-8">
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<article ng-repeat="feed in feeds">
<h3>{{feed.createdby}}</h3>
<p>{{feed.content}}</p>
<button ng-click="likeClicked($index)">{{isLiked[$index]|liked}}</button>
<span ng-init="likeCount=feed.likes.length">{{likeCount}}</span>
</article>
</body>
</html>
谢谢,
JP
答案 0 :(得分:3)
只需更改
`<span ng-init="likeCount=feed.likes.length">{{likeCount}}</span>`
per
`<span>{{feed.likes.length}}</span>`.
如果由于某些其他原因(我看不到)仍然需要控制器中的计数,请创建一个控制器,让我们假设FeedCtrl
,然后将其添加到article
:
<article ng-repeat="feed in feeds" ng-controller="FeedCtrl">
...
<span>{{likeCount}}</span>
</article>
您的FeedCtrl将是:
function FeedCtrl($scope) {
$scope.$watch('feed.likes.length', function(newValue) {
$scope.likeCount = newValue;
});
}
另一种方法是创建一个函数来解决你的价值:
<article ng-repeat="feed in feeds" ng-controller="FeedCtrl">
...
<span>{{likeCount()}}</span>
</article>
function FeedCtrl($scope) {
$scope.likeCount = function() {
return $feed && $feed.likes ? $feed.likes.length : undefined;
};
}
答案 1 :(得分:0)
如果 Feed 对象/数组很长,出于性能原因,最好使用 ng-bind 。
print EXISTS "$ID\n" unless exists $file1{$ID};
而不是
<span ng-bind="likeCount"></span>