我有一个名为 dir 的指令:
ng-model="job.start_date"
comparison-date="job.end_date
进入scope.$watch("comparisonDate...
我想访问我的ng-model值。问题是范围未定义为watch的回调函数。 问题是:如何在此函数中获取ng值?
.directive("dir", function() {
return {
scope: {
comparisonDate: "=",
ngModel: "="
},
link: function (scope, element, attrs, ctrl) {
var foo = scope.ngModel;
scope.$watch("comparisonDate", function(value, oldValue) {
console.log(value); //comparisonDate showing value properly
console.log(scope.ngModel); //Undefined
console.log(foo) //shows value but it's not refreshing. It shows allways the initial value
})
}
};
})
视图......
<input dir type="text" ng-model="job.start_date" comparison-date="job.end_date"/>
答案 0 :(得分:1)
在指令的链接阶段,该值可能不可用。您可以使用$observe
来观察值的变化。
attrs.$observe("comparisonDate", function(a) {
console.log(scope.ngModel);
})
答案 1 :(得分:1)
ng-model
是内置指令,它告诉Angular执行双向数据绑定。 http://docs.angularjs.org/api/ng.directive:ngModel
看起来您正在使用同一对象job
的属性值进行比较。如果您想坚持ng-model
,可以使用NgModelController
:http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController
然后将视图更改为:
<input dir type="text" ng-model="job"/>
并将指令更改为:
.directive("dir", function() {
return {
require: '?ngModel', // get a hold of NgModelController
link: function (scope, element, attrs, ngModel) {
// access the job object
ngModel.$formatters.push(function(job){
console.log(job.start_date);
console.log(job.end_date);
});
}
};
})
或者您可以将属性名称从ng-model
更改为某些未保留的字词。例如,将视图更改为:
<input dir type="text" comparison-start-date="job.start_date" comparison-end-date="job.end_date"/>
答案 2 :(得分:0)
尝试scope.$watch(attrs.comparisonDate, ...)
,然后使用attrs.ngModel