我有一个输入元素,我正在尝试动态命名,但是到目前为止,使用angular js还是没有运气。
都不
<input type="text" name="resource.Name" ng-model="resource.Value" ng-required="resource.IsRequired">
也不
<input type="text" name="{{resource.Name}}" ng-model="resource.Value" ng-required="resource.IsRequired">
为我工作。当我尝试访问名称属性时,它总是作为resource.Name而不是它包含的值返回。我尝试命名此输入控件的主要原因是验证,如果用户未在字段中输入文本,我想告诉他们需要哪个文本框。如果有任何角度指令可以用于此目的,我也准备使用它们。
谁能告诉我如何实现这一目标。
我的验证功能如下:
window.resourcesValidation = function ($scope, $rootScope, $alert) {
var subscriptions = $scope.scopeData.Subscriptions;
var isValidated = true;
if ($scope.resourceDataForm && $scope.resourceDataForm.$error && $scope.resourceDataForm.$error.required) {
var missingFields = [];
angular.forEach($scope.resourceDataForm.$error.required, function (value, key) {
isValidated = false;
missingFields.push("-" + value.$name);
});
$alert.error("Please fill in the all required fields.\r\n" + missingFields.join("\r\n"));
}
if (isValidated)
$scope.saveChanges(subscriptions);
return isValidated;
};
在一个非常相似的问题上引用另一个答案:
发生这种情况的原因是,控件的名称(在其父窗体上注册该控件的名称)是在
ngModelController
的实例化期间检索到的,根据文档,该名称发生在预链接阶段*之前(因此尚无内插法)。
换句话说,验证依赖于forms.$error
对象,该对象绑定到用该表单注册的控件。
控件ngModelController
负责以其父形式注册控件,并在预链接阶段(当尚未对name-expression进行内插时)进行实例化。
这可以通过一个自定义指令来解决,该指令以其父窗体手动注册该控件,但仅在确定其实际名称之后(在name-expression内插之后)。
您可以在此处找到整个答案。
查找“更新2”部分以获取有效的解决方案。
(这是工作演示的链接。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句