Angularjs 从此指令中删除$watch

Angularjs 从此指令中删除$watch,angularjs,optimization,angularjs-directive,Angularjs,Optimization,Angularjs Directive,我写了这个指令来处理我的日期输入: app.directive('myDate',['$filter',myDate]); 函数myDate($filter){ var指令={ 限制:'E', 模板:模板, 要求:'ngModel', 作用域:{}, 链接:链接 } 返回指令; 函数模板(元素、属性){ var模板=“”; 返回模板; } 功能链接(范围、元素、属性、ctrl){ scope.keyup=函数(键){ 如果(键===68){//D键 scope.date=$filter('dat

我写了这个指令来处理我的日期输入:

app.directive('myDate',['$filter',myDate]);
函数myDate($filter){
var指令={
限制:'E',
模板:模板,
要求:'ngModel',
作用域:{},
链接:链接
}
返回指令;
函数模板(元素、属性){
var模板=“”;
返回模板;
}
功能链接(范围、元素、属性、ctrl){
scope.keyup=函数(键){
如果(键===68){//D键
scope.date=$filter('date')(新日期(),'ddMMyyyy');
}
};
ctrl.$formatters.push(函数(数据){//要查看的模型
数据=$filter('date')(数据'ddMMyyyy');
返回数据;
});
ctrl.$parsers.push(函数(数据){///视图到模型
变量年份=data.toString().substr(-4);
var month=data.toString().substr(2,2);
var day=data.toString().substr(0,2);
var sep='-';
数据=(年、月、日)?日期。解析(年+九月+月+九月+日):“”;
返回数据;
});
范围:$watch('日期',函数(){
ctrl.$setViewValue(范围日期);
});
ctrl.$render=function(){
scope.date=ctrl.$viewValue;
};
}
}
不幸的是,我用$watch来更新我的模型。。。我想知道是否有更好的方法在不使用$watch的情况下触发$setViewValue(scope.date);只是为了优化一下


谢谢大家!

将此添加到模板中:

ng-change="updateParent()"
这是给你的链接:

    scope.updateParent = function(){
      ctrl.$setViewValue(scope.date);
    }

为什么不在keyup函数上设置值呢?我将
ctrl.$setViewValue(scope.date)在键控功能中。。。但它是否会以编程方式更改?好吧,这取决于我们谈论的编程方式更改。我认为在$http函数之后…至少使用$timeout更改$scope.test似乎是可行的,但这是因为$rendermm。。。从文档中可以看出,如果模型是以编程方式更改的,而不是通过对输入值的更改来更改,那么它将不会被触发。我无法从代码中看出日期可以以编程方式更改,而不是在scope.keyup中更改。所以是的,你是对的。。。编程模型更改不会触发ng更改。不管怎样,当数据以编程方式更改时,您都需要启动摘要周期。因此,您可以使用watch覆盖所有基础,也可以使用ng change处理UI中的输入更改,并在编程更改后执行类似$scope.$apply()的操作。
    scope.updateParent = function(){
      ctrl.$setViewValue(scope.date);
    }