Usando el complemento TokenInput y usando la validación de formController incorporada de AngularJS.
En este momento estoy tratando de verificar si el campo contiene texto y luego establecer el campo como válido si lo tiene. El problema con el uso del complemento es que crea su propia entrada y luego un ul + li para stlying.
Tengo acceso a addItem (formname) y mis capacidades en el controlador, solo necesito configurarlo en $ valid.
Margen.
<form class="form-horizontal add-inventory-item" name="addItem">
<input id="capabilities" name="capabilities" token-input data-ng-model="inventoryCapabilitiesAutoComplete" data-on-add="addCapability()" data-on-delete="removeCapability()" required>
<div class="required" data-ng-show="addItem.capabilities.$error.required" title="Please enter capability."></div>
</form>
JS.
$scope.capabilityValidation = function (capability) {
if (capability.name !== "") {
addItem.capabilities.$valid = true;
addItem.capabilities.$error.required = false;
} else {
addItem.capabilities.$valid = false;
addItem.capabilities.$error.required = true;
}
};
Estoy ejecutando la función CapacityValidation cuando TokenInput tiene algo ingresado y pasando el objeto.
EDITAR:
Descubrí que ng-model en mi entrada hace cosas y obtiene los resultados de autocompletar, por lo que no puedo hacer que ng-valid funcione ya que se basa en el modelo.
$scope.inventoryCapabilitiesAutoComplete = {
options: {
tokenLimit: null
},
source: urlHelper.getAutoComplete('capability')
};
No escribí esta implementación de autocompletar, ¿hay otra forma de hacer esto en la que tenga acceso al attr ng-model y mueva la función del modelo a otro lugar?
fuente
<div ... data-ng-show="capabilities_error" ...>
En otras palabras, ¿hay alguna razón por la que desee / necesite usar FormController?addItem.capabilities.$valid = true
Intentó configurar addItem.capabilities. $ Error.required en true o false según corresponda?Respuestas:
No puede cambiar directamente la validez de un formulario. Si todas las entradas descendientes son válidas, el formulario es válido, si no, no lo es.
Lo que debe hacer es establecer la validez del elemento de entrada. Al igual que;
Ahora la entrada (y por tanto el formulario) no es válida. También puede ver qué error causa invalidación.
fuente
capabilities
es una variable? Tengo una matriz que contiene nombres de entrada y quiero recorrer el interior de la matriz y establecerlos como inválidos uno por uno: /name
atributo del formulario y el atributo de entradaid
. Esto es diferente de los valores establecidos porngModel
$scope.addItem['myVariableName'].$setValidity("youAreFat", false);
$scope.addItem.capabilities.$setValidity("youAreFat", false);
Las respuestas anteriores no me ayudaron a resolver mi problema. Después de una larga búsqueda, me encontré con esta solución parcial .
Finalmente resolví mi problema con este código para configurar el campo de entrada manualmente en ng-invalid (para configurarlo en ng-valid, configúrelo en 'verdadero'):
fuente
$setValidity
contrue
el segundo parámetro siempre que la entrada sea válida.Encontré esta publicación con un problema similar. Mi solución fue agregar un campo oculto para mantener mi estado inválido para mí.
En mi caso, tenía un bool anulable en el que una persona tenía que seleccionar uno de dos botones diferentes. si responden que sí, se agrega una entidad a la colección y el estado del botón cambia. Hasta que se respondan todas las preguntas (uno de los botones en cada uno de los pares tiene un clic) el formulario no es válido.
fuente
Es muy simple. Por ejemplo: en su controlador JS use esto:
o
o
o
Todo funciona para mí para diferentes requisitos. Presiona si esto resuelve tu problema.
fuente