0

看看我的小提琴。http://jsfiddle.net/tyF7q/

angular.js 中的数据绑定有一些我不理解的地方:

如果您多次点击“addSomething”,每次点击都会出现“test3”。
现在,如果您单击“addSomething2”,则即使在 2009 毫秒之前也不会显示任何内容。
但是如果你点击“addSomething”,“test4”也会出现,但只有在2009ms之后点击,否则“test4”也不会出现。
此外,如果您单击“addSomething2”并在 2009 毫秒后单击“addSomething2”,则会出现一个“test4”。

这只是我使用 socket.io 并有一些 socket.on() 事件绑定时出现的问题的一个简单示例。在那种情况下,我的“addSomething2”ng-click 绑定将是 socket.on('addSomething2') 但结果仍然相同。

因为我是 angularjs 的新手,所以我看不出我在这里做错了什么。

html:

 <div ng-app>   
     <div id="edit" ng-controller="Edit">
        <a href="" ng-click="addSomething()">addSomething  </a><br>
        <a href="" ng-click="addSomething2()">  addSomething2</a>
        <div ng-repeat="doneMsgs in doneSoFar">
            {{doneMsgs.status}}:{{doneMsgs.info}} <br>
        </div>
     </div>

    </div>

js:

功能编辑($范围){

$scope.doneSoFar = [];
$scope.doneSoFar.push({status:"test",info:"test"})
var doneSoFarPush = function(status,info){
    $scope.doneSoFar.push({status: status,info:info });
};
doneSoFarPush('test2','test2');

$scope.addSomething = function() {
    doneSoFarPush('test3','test3');
};

$scope.addSomething2 = function() {
    setTimeout(function(){
    doneSoFarPush('test4','test4');
    },2009);
};
};
4

1 回答 1

4

您需要使用该$timeout服务而不是setTimeout直接使用该服务。这将允许角度管理$digest周期。否则,您将不得不自己管理$apply范围。

这是一个更新的小提琴

和更新的代码:

function Edit($scope, $timeout) {


    $scope.doneSoFar = [];
    $scope.doneSoFar.push({status:"test",info:"test"})
    var doneSoFarPush = function(status,info){
        $scope.doneSoFar.push({status: status,info:info });
    };
    doneSoFarPush('test2','test2');

    $scope.addSomething = function() {
        doneSoFarPush('test3','test3');
    };

    $scope.addSomething2 = function() {
        $timeout(function(){
        doneSoFarPush('test4','test4');
        },2009);
    };
};
于 2013-10-09T13:26:42.867 回答