2016-04-15 2 views
1

У меня возникли проблемы с функцией Validators.compose (без ошибок, просто не проверяет)Angular2 - Validators.compose

Вот мой код:

var validators =()=> { 
      var validatorArr = [];     
      validatorArr.push(Validators.required); 
      validatorArr.push(Validators.maxLength(column.max)); 
      return Validators.compose(validatorArr); 
    }; 
    var ctrl: Control = new Control(row.items[column.mapper], validators); 
    row.form.addControl(column.mapper, ctrl); 

, когда я ставлю Validators.required вместо validators функция, валидация работает.

ответ

3

Вы должны использовать этот код, а и не использовать функцию обратного вызова, чтобы определить свои валидаторы:

var validatorArr = [];     
validatorArr.push(Validators.required); 
validatorArr.push(Validators.maxLength(column.max)); 

var ctrl: Control = new Control(row.items[column.mapper], 
        Validators.compose(validatorArr)); 
row.form.addControl(column.mapper, ctrl); 

второй параметр конструктора Control соответствует функции, которая может быть создана с использованием compose метод ...

+2

Не должно быть 'Validators.compose (validatorArr)'? –

+1

Г-н Тьерри Темплиер, я очень ценю вашу помощь. Спасибо. (Я написал свой код так, как в первый раз, но машинописный сошел с ума по поводу «type any []», поэтому теперь я сначала объявляю переменную как null, а затем устанавливаю ее в массив –

0

Просто используйте его без функции стрелка:

new Control(row.items[column.mapper],Validators.compose([Validators.required, Validators.minLength(4)])); 

или

var validators =()=> { 
    return Validators.compose([Validators.required, Validators.minLength(4)]); 
} 

new Control(row.items[column.mapper], validators()); 
+0

Спасибо за ответ, в конце концов, проблема была чисто машинопись. Я полностью удалял функцию валидаторов и напрямую использовал Validators.compose (arrayOfValidators); –

1

Конструктор управления ожидает ValidatorFn в качестве аргумента. Validators.compose() принимает массив ValidatorFn и возвращает один ValidatorFn. Но вы не передаете этот аргумент ValidatorFn. Вы передаете функцию, которая при вызове возвращает ValidatorFn.

Замените ваш код

var validatorArr = [];     
validatorArr.push(Validators.required); 
validatorArr.push(Validators.maxLength(column.max)); 
var validatorFn = Validators.compose(validatorArr); 

var ctrl: Control = new Control(row.items[column.mapper], validatorFn); 
row.form.addControl(column.mapper, ctrl); 

Или, короче:

var ctrl: Control = new Control(row.items[column.mapper], 
           Validators.compose([Validators.required, 
                Validators.maxLength(column.max)])); 
row.form.addControl(column.mapper, ctrl); 
+0

Спасибо за ответ! вся проблема для меня началась в строке 1 - машинописный шрифт жаловался, что validatorArr имеет тип any [] и не разрешен внутри compose. Я обходил это с помощью ' var validatorArr; validatorArr = [];' –