我已经制定了一个处理文件上传的指令,它在上传文件时起作用,但在预加载数据时不太好,因为模型上的手表没有给我预期的结果。
这些是代码的相关部分:
http://codepen.io/sergio0983/pen/EyLwaQ?editors=1011
导致我头疼的部分就是这个:<div ng-app = 'app' ng-controller = 'customCtrl'>
<file ng-model = 'doc' placeholder = 'modelEmpty' required></file>
<file ng-model = 'existingDoc' placeholder = 'modelNotEmpty' ng-required></file>
<div>
JS
app.controller("customCtrl", function($scope){
$scope.existingDoc = "filename.jpg"
})
app.directive("file", function($parse){
return{
restrict:"E",
require:"?ngModel",
scope:{
ngModel:"="
},
transclude:true,
.....
link:....
scope.$watch(attrs.ngModel, function(newVal, oldVal){
console.debug(newVal, oldVal);
});
}
});
在这款手表中,我想在模型设置值时进行一些初始化,但我总是得到newVal和oldVal的“undefined”,“undefined”。可能我错过了一些基本的东西,但却找不到任何东西。
此外,调用$ setViewValue甚至不会触发监视:maybeI误解了一些东西,但我认为$ setViewValue改变了模型值,因此,我预计它会触发$ watch。
有人能解释我怎么认为所有这些东西都可以工作?我明显错过了什么。
答案 0 :(得分:1)
如果你只是在指令中寻找双向绑定数据,那么使用=
中的scope
和链接功能中的$watch
就是你需要的全部内容do(观察范围内变量的名称):
scope.$watch('ngModel', function (/* ... */) { /* ... */ });
如果ng-model
是该属性的名称,那么您的指令的消费者可能会感到困惑,因此我建议您选择一个不同的名称(最好不要以{{1}为前缀})。