我有将此功能添加到$ scope对象的功能。

function newUT(unit, apply) {
    newGuid(function (data) {
        var newTask = {
            id: data,
            TaskName: 'New Task',
            _showdetails: true,
        };
        unit.tasks.push(newTask);
        apply();
    });
}


该功能通过以下方式分配给控制器中的$ scope
        $ scope.newUT = newUT;

在放入数组对象之前,ng-repeat并没有更新。 newGuid是旧版应用程序,用于从服务器获取Guid,然后将其放入本地文件存储区Guid索引表中。因此,我无法完全消除该代码。

该代码由以下方式调用:

<button type="button" ng-click="newUT(unit,$apply)">


所以问题是我真的不喜欢传递$ apply,但是如果我不喜欢,我将无法更新数组。


有没有更好的办法?
我看到了Angular service containing http get call not working with ng-repeat


但是我不确定如何将newGuid调用包装为q调用
由于newGuid是共享服务器调用,因此我不知道这是否正确。



有没有更好的办法?我的工作可以接受吗?

最佳答案

$timeout服务可以在这里提供帮助。如果为newGuid方法设置了包装服务,则可以将回调包装在$ timeout中:

JSFiddle

app.service('svc', function($timeout){
    this.getGuid = function(cb){
        getGuid(function(value){
            $timeout(function(){
                cb(value);
            });
        });
    };
});

10-04 15:55