Angularjs 从指令更改ng模型值

Angularjs 从指令更改ng模型值,angularjs,angularjs-directive,angularjs-ng-model,Angularjs,Angularjs Directive,Angularjs Ng Model,基本上,我正在尝试为日期选择器编写一个指令。在这个指令中,我使用ng模型的变量将更改后的值反映给父控制器。但是我有一些问题。我不知道如何设置ng模型变量的初始值。其次,我不知道如何更新ng模型变量并对其进行验证 我试过这样的东西 angular.module(“mainModule.directives”).directive('datePicker',function(){ var指令={ 限制:'E', 替换:false, 模板:“”, 要求:'ngModel', 作用域:{}, 链接:功能

基本上,我正在尝试为日期选择器编写一个指令。在这个指令中,我使用ng模型的变量将更改后的值反映给父控制器。但是我有一些问题。我不知道如何设置ng模型变量的初始值。其次,我不知道如何更新ng模型变量并对其进行验证

我试过这样的东西

angular.module(“mainModule.directives”).directive('datePicker',function(){
var指令={
限制:'E',
替换:false,
模板:“”,
要求:'ngModel',
作用域:{},
链接:功能($scope、elem、attr、ngModelCtr){
$scope.date=ngModelCtr.$viewValue;
函数fromUser(文本){
$scope.date=ngModelCtr.$viewValue;
}
函数toUser(文本){
ngModelCtr.$setViewValue($scope.date);
}
ngModelCtr.$parsers.push(fromUser);
ngModelCtr.$formatters.push(toUser);
}
};
返回指令;
});

您需要通过

ngModelController.$render()

解析器和格式化程序使用现有值,并且应该返回我认为已解析或格式化的结果。您可以将
ngModelController.$render
设置为值更改时将调用的函数,然后在需要时使用
ngModelController.$setViewValue
更新值。这里有一个小提琴,显示了仅在输入有效日期()时使用更新基础模型:


更改指令的日期变量后,它应反映在ng模型变量中,即modelDate,并从指令中设置验证参数。您需要“实现”
ngModel.$render()
将模型值传输到视图。然后(取决于指令的具体实现),您必须调用
ngModel.$setViewValue(value)
从UI更新模型。请参见本文底部的示例。
link : function(scope, elem, attr, ctrl) {
    ctrl.$render = function() {
        scope.date = moment(ctrl.$viewValue).format("YYYY-MM-DD");
    };
    scope.$watch('date', function(newValue, oldValue) {
        // only update if it is a valid date string
        var m = moment(newValue);
        if (m.isValid()) {
            ctrl.$setViewValue(m);
        }
    });
}