AngularJS: невозможно получить доступ к $ valid при вводе из директивы - PullRequest
0 голосов
/ 30 августа 2018

У меня есть простое приложение, основанное на проекте angular-fullstack, с множеством очень похожих полей ввода.

Цель: сделать поля ввода динамическими, переместить их в директиву, чтобы код поля ввода был перемещен из шаблона - лучше поддерживать, меньше повторений кода.

Проблема: Я не могу получить доступ к таким значениям, как $valid, в динамически сгенерированном поле, поскольку они не установлены

У меня очень простая директива:

'use strict';
const angular = require('angular');

export default angular.module('testApp.inputText', [])
  .directive('inputText', function() {
    return {
      template: require('./inputText.html'),
      restrict: 'EA',
      scope: false,
      transclude: true,
      link: function(scope, element, attrs) {

        scope.fieldName = attrs.name;

      }
    };
  })
  .name;

С простым шаблоном:

<input
  type="text"
  name="fieldName"
  class="uk-input"
  ng-model="build.justTest.view[fieldName].value"
  >

Который я называю так:

<form name="build.justTest.view" novalidate>
  <input-text name="new-test-input"></input-text>
</form>

Когда я использую ng-inspector для проверки динамического поля, оно выглядит так:

{value: "1234"}

По сравнению со статическим полем ввода, определенным в шаблоне:

{$viewValue: "", $modelValue: "", $$rawModelValue: "", $validators: {…}, $asyncValidators: {…}, …}$$animate: {on: ƒ, off: ƒ, pin: ƒ, enabled: ƒ, cancel: ƒ, …}$$attr: Attributes {$attr: {…}, $$element: JQLite(1), type: "text", name: "giftDescription", class: "uk-input uk-height-small", …}$$classCache: {ng-valid: true, ng-invalid: false, ng-valid-minlength: true, ng-valid-maxlength: true}$$currentValidationRunId: 8$$element: JQLite [input.uk-input.uk-height-small.ng-pristine.ng-untouched.ng-valid.ng-empty.ng-valid-minlength.ng-vali…]$$exceptionHandler: ƒ (exception, cause)$$lastCommittedViewValue: ""$$ngModelGet: ƒ (s,l,a,i)$$ngModelSet: ƒ (s,v,l)$$parentForm: {$$controls: Array(16), $error: {…}, $$success: {…}, $pending: undefined, $name: "build.justTest.view", …}$$parse: ƒ $parse(exp, interceptorFn)$$parsedNgModel: ƒ (s,l,a,i)$$parsedNgModelAssign: ƒ (s,v,l)$$parserValid: undefined$$pendingDebounce: null$$q: ƒ $Q(resolver)$$rawModelValue: ""$$success: {minlength: true, maxlength: true}$$timeout: ƒ timeout(fn, delay, invokeApply)$asyncValidators: {}$dirty: false$error: {}$formatters: [ƒ]$invalid: false$modelValue: ""$name: "giftDescription"$options: ModelOptions {$$options: {…}}$parsers: []$pending: undefined$pristine: true$render: ƒ ()$touched: false$untouched: true$valid: true$validators: {minlength: ƒ, maxlength: ƒ}$viewChangeListeners: [ƒ]$viewValue: ""value: "12345678910"$$scope: Scope {$$childTail: ChildScope, $$childHead: ChildScope, $$nextSibling: null, $$watchers: Array(86), $$listeners: {…}, …}__proto__: Object

Может кто-нибудь сказать мне, почему $valid не определено на входе из директивы и

Заранее спасибо!

1 Ответ

0 голосов
/ 01 сентября 2018

Вы пытались добавить это следующее в определение вашей директивы?

...,
require: '^form',
restrict: 'EA',
...

Я всегда думал, что это автоматически делается с помощью ввода. Но когда вы используете директиву, вы должны определить это.

Затем вы можете получить доступ к форме в функции ссылки вашей директивы следующим образом:

link: function(scope, element, attrs, myForm) {...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...