Невозможно использовать Array.prototype.some / every как выражение

#angularjs #angularjs-directive

#angularjs #angularjs-директива

Вопрос:

Предположим, у меня есть массив myArray и кнопка.

 <button>Click</button>
  

И я хочу использовать Array.prototype.some / every, чтобы отключить кнопку, используя директиву ng-disabled . Например:

 <button ng-disabled="myArray.some(x => x == 1)">Click</button>
  

Это выдает Token '>' not a primary expression at column of the expression ошибку.

Почему это происходит? Я делаю что-то не так?

Комментарии:

1. Да: вы используете функцию со стрелкой внутри выражения AngularJS, а угловые выражения это не поддерживают. Вызовите функцию вашей области / контроллера и поместите туда код JavaScript.

2. @JBNizet Точно, я действительно вызвал функцию из своего контроллера… но я просто хочу понять… Угловые выражения не поддерживают функции со стрелками… есть ли причина для этого?

3. Ну, во-первых, когда были разработаны выражения AngularJS, функций со стрелками не существовало. Другая причина заключается в том, что это значительно усложняет отрицательный выигрыш, поскольку плохой практикой является добавление слишком большого количества логики в представление.

4. Если вы хотите запустить более сложный код JavaScript, вы должны сделать его методом контроллера и вызвать метод из вашего представления. Прочитайте руководство разработчика AngularJS — AngularJS Ecpressions vs JS Expressions .

5. Спасибо, @georgeawg, это имеет смысл. You cannot declare functions in an AngularJS expression, even inside ng-init directive.

Ответ №1:

Как говорится в руководстве разработчика AngularJS, нельзя объявлять функции внутри выражений AngularJS.

Нет объявлений функций:Вы не можете объявлять функции в выражении AngularJS, даже внутри директивы ng-init .