AngularJS: Como faço para definir manualmente a input para $ valid no controller?

Usando o plug- in TokenInput e usando a validação de formController integrada do AngularJS.

No momento, estou tentando verificar se o campo contém texto e, em seguida, defina o campo como válido, se o fizer. O problema com o uso do plugin é que ele cria sua própria input e, em seguida, um ul + li para stlying.

Eu tenho access a addItem (formname) e meus capablities no controlador, eu só preciso configurá-lo para $ válido.

Marcação

  

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; } }; 

Estou executando a function capabilityValidation quando o TokenInput tem algo inserido e passando no object.

EDITAR:

Descobri que o ng-model na minha input faz as coisas e obtém os resultados do preenchimento automático, e é por isso que não consigo fazer o ng-valid funcionar, já que é baseado no modelo.

 $scope.inventoryCapabilitiesAutoComplete = { options: { tokenLimit: null }, source: urlHelper.getAutoComplete('capability') }; 

Eu não escrevi essa implementação de autocomplete, existe outra maneira de fazer isso onde eu teria access ao attr do ng-model e mover a function do modelo para outro lugar?

Você não pode alterar diretamente a validade de um formulário. Se todas as inputs descendentes forem válidas, o formulário é válido, se não, então não é.

O que você deve fazer é definir a validade do elemento de input. Igual a;

 addItem.capabilities.$setValidity("youAreFat", false); 

Agora a input (e, portanto, o formulário) é inválida. Você também pode ver qual erro causa a invalidação.

 addItem.capabilities.errors.youAreFat == true; 

As respostas acima não me ajudaram a resolver o meu problema. Depois de uma longa busca, esbarrei nessa solução parcial .

Eu finalmente resolvi meu problema com este código para definir o campo de input manualmente para ng-invalid (para definir como ng-válido, defina como ‘true’):

 $scope.myForm.inputName.$setValidity('required', false); 

Me deparei com este post w / um problema semelhante. Minha correção foi adicionar um campo oculto para manter meu estado inválido para mim.

  

No meu caso, eu tinha um bool anulável que uma pessoa tinha que selecionar um dos dois botões diferentes. se eles responderem sim, uma entidade será adicionada à coleção e o estado do botão será alterado. Até que todas as perguntas sejam respondidas, (um dos botões em cada um dos pares tem um clique) o formulário não é válido.

 vm.hasHighSchool = function (attended) { vm.application.hasHighSchool = attended; applicationSvc.addSchool(attended, 1, vm.application); } 
  

É muito simples. Por exemplo: no seu controlador JS use isto:

 $scope.inputngmodel.$valid = false; 

ou

 $scope.inputngmodel.$invalid = true; 

ou

 $scope.formname.inputngmodel.$valid = false; 

ou

 $scope.formname.inputngmodel.$invalid = true; 

Tudo funciona para mim por exigência diferente. Aumente se isso resolver o seu problema.