2013-04-23 47 views
5

我正在嘗試爲我的應用程序創建一個「like」函數。我希望能夠將動態生成的數字的值設置爲'like count'。問題在於使用'ng-init',因爲文檔說這是一個不好的方法!替代在視圖中使用ng-init?

你如何設置'控制器'而不是'視圖'的值?

這是我到目前爲止有:

<!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

回答

3

只要改變

`<span ng-init="likeCount=feed.likes.length">{{likeCount}}</span>` 

`<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; 
    }; 
} 
+0

感謝您的答覆。我更喜歡第二種方法,我已經在Plunker中找到了一個:http://plnkr.co/edit/aHyxJFXVrwIGb27iK45Q?p=preview – JohnRobertPett 2013-04-23 12:06:56

+0

說那個飼料是不確定的,... – JohnRobertPett 2013-04-23 12:07:13

+0

對不起,我的不好。它是'$ scope.feed'。固定。還要注意我首先錯過的「回報」。 – 2013-04-23 12:14:35

0

如果您飼料對象/數組很長,最好使用NG-綁定出於性能的考慮。

<span ng-bind="likeCount"></span> 

而不是

{{likeCount}}