我需要在加载数据后更新我的模型。所以我试着写一个可以做到这一点的指令。我不认为这会很难:(
我首先尝试过一个过滤器,它应该更简单,但是出现了这个错误。
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();
}
});
但是当然现在模型已经更新了,“嘿,我改变了,所以再次更新!”一次又一次......
我只需要进行一次更新。我想我需要另一种方法,但无法弄清楚要做什么。
答案 0 :(得分:0)
您可以取消注册$watch
var unregister = scope.$watch(attrs.ngModel, function() {
if (shouldStopWatching) {
unregister();
}
});
其中shouldStopWatching
是您需要的任何条件(即在第二次回调呼叫时停止等)