angularjs自定义指令值未过帐到控制器
我是新来的angularjs, 我使用的是我在这里得到的自定义指令 此指令在验证后未将价格值过帐到控制器,我只得到名称字段值 这是我的密码:angularjs自定义指令值未过帐到控制器,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我是新来的angularjs, 我使用的是我在这里得到的自定义指令 此指令在验证后未将价格值过帐到控制器,我只得到名称字段值 这是我的密码: <div class="form-group"> <label for="exampleInputEmail1">Item Price</label> <div class="input-group"> <span class="input-group-addo
<div class="form-group">
<label for="exampleInputEmail1">Item Price</label>
<div class="input-group">
<span class="input-group-addon">$</span>
<input id="phone" class="form-control" ng-model="item.price" currency-input>
</div>
</div>
})) 我看到您正在使用
link
函数注册自定义解析器
请注意,这种方法更多的是将自定义的解析器注册到NgModelController
中的一种变通方法,因为在指令之外没有直接的API来实现这一点
我建议进行以下更改以使其正常工作
angular.module('minovatepp',[])
-您需要传递一个空数组,指示此模块没有依赖项
您无法在模型中捕获值的原因是,您没有从自定义解析器返回解析后的值,因此请更改链接
函数,如下所示
在货币输入指令中
link: function(scope, element, attrs, ctrl) {
/* removed the return as it's not required */
ctrl.$parsers.push(function(inputValue) {
var inputVal = element.val();
/* removing your logic for brevity */
var res = intPart + decPart;
if (res != inputValue) {
ctrl.$setViewValue(res);
ctrl.$commitViewValue();
ctrl.$render();
}
/* return the final value once you're done parsing */
return res;
});
这是一个带有上述更改的示例。希望这有帮助:)尝试通过使用(并在这里发布)一个最小的示例来缩小范围。很好,它正在工作,我只是把返回res:
谢谢@Arkantos
link: function(scope, element, attrs, ctrl) {
/* removed the return as it's not required */
ctrl.$parsers.push(function(inputValue) {
var inputVal = element.val();
/* removing your logic for brevity */
var res = intPart + decPart;
if (res != inputValue) {
ctrl.$setViewValue(res);
ctrl.$commitViewValue();
ctrl.$render();
}
/* return the final value once you're done parsing */
return res;
});