gpt4 book ai didi

angularjs - 在 $parser 中更新 View

转载 作者:行者123 更新时间:2023-12-02 03:45:01 25 4
gpt4 key购买 nike

我有以下自定义验证器指令:

app.directive('validator', ['storeService', function (storeService) {
return {
require: '^ngModel',
link: function ($scope, $element, $attrs, $ctrl) {

$ctrl.$parsers.unshift(function (viewValue) {

var store = storeService.find(viewValue);

if (store == undefined) {
$ctrl.$setValidity('store', false);
return undefined;
} else {
$ctrl.$setValidity('store', true);

return store;
}
});
}
};
}]);

调用“storeService.find(viewValue);”检查 viewValue 是否存在。在进行查找时,它会将 viewValue 和商店集中的每个商店小写。如果它匹配商店,它会使用正确的大小写从服务中返回商店。

例如,用户输入“伦敦”,服务返回“伦敦”。

如何使用服务中的值更新 View ?

最佳答案

由于您在指令中放置了 required:'^ngModel',链接函数中的 $ctrl 将是 ngModelController。您必须在范围内调用 ngController 的方法 $setViewValue。$apply 函数而不是调用 ngController 的 $render 方法,如下所示:

else {
$ctrl.$setValidity('store', true);
// sets viewValue
scope.$apply(function(){
$ctrl.$setViewValue($VALUE_YOU_WISH);
});
// renders the input with the new viewValue
$ctrl.$render()
// returns store as parameter for next parser in the pipeline
return store;
}

请记住,您要取消转移到 $parsers 的函数的返回值将作为参数传递给 ngModelControllers $parsers 管道中的下一个解析器,而不是将在 View 中呈现的值。

关于angularjs - 在 $parser 中更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17618074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com