4
代码:http://plnkr.co/edit/xPZM5E7tjYqlt5NIabIu?p=preview行号:17
在这段代码,如果我使用ctrl.$modelValue = nVal;
而不是$parse(attrs.ngModel).assign(scope, nVal);
那么它不工作。你能指出原因吗?
angModule.directive('moChangeProxy', function ($parse) {
return {
require:'^ngModel',
restrict:'A',
link:function (scope, elm, attrs, ctrl) {
var proxyExp = attrs.moChangeProxy;
scope.$watch(proxyExp, function (nVal) {
if (nVal != ctrl.$modelValue) {
//ctrl.$modelValue = nVal; // This does not work
$parse(attrs.ngModel).assign(scope, nVal); // This works well
}
});
elm.bind('blur', function() {
var proxyVal = scope.$eval(proxyExp);
if(ctrl.$modelValue != proxyVal) {
scope.$apply(function(){
$parse(proxyExp).assign(scope, ctrl.$modelValue);
});
}
});
}
};
});
非常好!了解。 – SunnyShah
我认为直接通过ctrl改变值。$ modelValueis滥用控制器的私有变量。 :) – SunnyShah
我认为角应提供ngModelController.setModelValue()函数。 – SunnyShah