【发布时间】:2015-10-09 13:21:52
【问题描述】:
我对 ngModel.NgModelController.$parsers 有疑问。我在例子中解释它: 我为输入字段创建指令。每次我在 html 中更改此输入中的值时,它都应该调用我的注册函数。
并且这个注册的函数应该总是将你在输入字段中写的内容更改为'A'字符,但修改模型。
html 文件:
<div ng-app="myApp">
<form>
<input ng-model="myval1" somedir/>
</form>
</div>
和js文件:
var myApp = angular.module('myApp', []);
myApp.directive("somedir", function(){
return {
restrict:'A',
require: '?ngModel',
link: function(scope, element, attrs, ngModelController) {
ngModelController.$parsers.unshift(function(val){
console.log("i'm here");
ngModelController.$viewValue ="A";
ngModelController.$render();
return val;
});
}
}
});
我准备 jsfiddle 进行测试:
角度 1.2.9:http://jsfiddle.net/hwzxfon3/1/
角度 1.4.7:http://jsfiddle.net/372re41m/1/
在 Angular 1.2.9 中它可以正常工作。在 Angular 1.4.7 中存在一些问题。如何获得它:
专注于输入字段,然后按 3 次相同的按钮,例如'1'。
第一次在输入字段和浏览器控制台i'm here 中显示“A”。第二次也一样。但第三次显示'A'+推送字符(例如'A1')并且没有写入浏览器控制台i'm here,这意味着没有调用注册函数。
请告诉我,我的代码中是否有错误(请写下要更改的内容),还是 Angular 中的错误(然后我向 Angular 团队报告错误)?我在 os x (10.10.5) 的最新 chrome 和 safari 中对其进行了测试。如果它对你有用,请也写这个。
【问题讨论】:
-
我在 windows 8.1/Chrome 版本 45.0.2454.101 m - 两个小提琴对我来说都一样。
-
在 Firefox 开发者版 43.0a2 中相同
-
#sirrocco 感谢您的帮助,请再次检查,因为我在小提琴中修复了 angular 1.4.7 的外部链接
-
确实按照您的解释进行。但是你想做什么?
标签: javascript angularjs angularjs-directive angular-ngmodel