Angularjs:如何只更新一次我的模型

时间:2014-07-24 14:42:00

标签: angularjs directive

我需要在加载数据后更新我的模型。所以我试着写一个可以做到这一点的指令。我不认为这会很难:(

我首先尝试过一个过滤器,它应该更简单,但是出现了这个错误。

Error: [ngModel:nonassign] Expression 'editpage.url | addUrl' is non-assignable.

所以现在我尝试指令方式。这是我在视图中的html代码:

<input ng-model="editpage.url" add-url type="text" class="light_txtbox" readonly>

这是我的指示:

app.directive('addUrl', [function() {
    return {
        restrict: 'A',
        require: '?ngModel',
        replace: true,
        link: function(scope, element, attrs, ngModel) {
            if (!ngModel) return;

            // what to do next?
        }
    };
}]);

在“下一步做什么”部分,我尝试了这样的手表:

scope.$watch(attrs.ngModel, function(site) {
                if (typeof site !== undefined) {
                    ngModel.$setViewValue('www.mysite.com/' + site);
                    ngModel.$render();
                }
            });

但是当然现在模型已经更新了,“嘿,我改变了,所以再次更新!”一次又一次......

我只需要进行一次更新。我想我需要另一种方法,但无法弄清楚要做什么。

1 个答案:

答案 0 :(得分:0)

您可以取消注册$watch

var unregister = scope.$watch(attrs.ngModel, function() {
    if (shouldStopWatching) {
        unregister();
    }
});

其中shouldStopWatching是您需要的任何条件(即在第二次回调呼叫时停止等)