2016-07-12 1 views
1

Мы вызываем две функции в одной директиве ng-click, есть ли какие-либо вопросы, о которых мы должны знать?Есть ли недостаток вызова более чем одной функции в директиве ng-click?

<button type="button" ng-click="func1(); func2();">Click</button> 

Мы могли бы также назвать одну функцию, которая вызывает две функции вместо:

<button type="button" ng-click="func1()">Click</button> 

$scope.func1(){ 
    func2(); 
} 

$scope.func2(){ 
//something 
} 
+0

Используйте одну функцию и держите логику в контроллере, где она принадлежит. Легче видеть логику при чтении кода контроллера и проще рефакторе – charlietfl

ответ

0

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

Вы можете достичь этого, вызвав функцию внутри другой функции.

<button type="button" ng-click="func1(); func2(); func3();">Click</button> 

Итак, здесь func1 вызовет сначала, а затем func2 и func3.

2

Не имеет разницы, оба из них работает, а также другой (и, на мой взгляд, лучше) опция

<button type="button" ng-click="clickAction()">Click</button> 

$scope.clickAction = function() { 
    $scope.func1(); 
    $scope.func2(); 
}; 
+0

Почему так брат, есть ли проблемы с первым подходом? @AlexD –

+0

@SurjeetBhadauriya Хорошо иметь ваши директивы (например, 'ng-click'), просто предоставить« клей »между представлением и вашим контроллером и заставить контроллер позаботиться о реальной логике. С этой точки зрения, я думаю, что лучше иметь только одну функцию в 'ng-click' и обработчик сделает все, что вам нужно. – JLRishe

+0

@SurjeetBhadauriya Создайте третий метод, который обертывает оба метода. Преимущество здесь в том, что вы ставили меньше логики в свой шаблон – JEMI

0

Да, первый подход правильный. ng-click задать действительные AngularJS expression и оценивать то же самое, не имеет значения, это один или multimple функция или любое другое выражение, как "anyVar = 'Button Clicked'"

Таким образом, эти ниже примеры являются правильными

<button type="button" ng-click="func1(); func2();">Click</button> 

или

<button type="button" ng-click="anyVar = 'Button Clicked'; index++;">Click</button> 
+0

Я думаю, что это правильно. Это работает, потому что 'ng-click' оценивает выражение' AngularJS' внутри этого, а не только 'function'. –

+0

Что означает «ниже правильно» * означает? Не так много ответа – charlietfl

+0

Способ использования 'ng-click'. Пожалуйста, прочитайте вопрос один раз. –

0

Нет проблем с обоими способами, но я бы объявил только 1 функцию в $scope и еще 2 функции только в JS:

<button type="button" ng-click="func3();">Click</button> 

func1() { 
    // something 
} 

func2() { 
    // something 
} 

$scope.func3 = function() { 
    func1(); 
    func2(); 
} 
1

Вызов двух функций в одном ng-клике - это плохая практика. Что произойдет, если вы решите добавить третью функцию? Что делать, если вы хотите, чтобы вторая функция выполнялась при выполнении определенного условия? Полагая больше логики, чем это необходимо в коде презентации, плохое разделение проблем.

0

Все подходы правильные. Но вместо этого мы можем использовать эти две функции func1() и func2() как функции JS вместо функций scope и называть их как внутри вашей новой функции области с помощью ng-click.

HTML код:

<button type="button" ng-click="click()">Button</button> 

контроллер код:

function func1() { 
    // func1 code goes here 
} 

function func2() { 
    // func2 code goes here 
} 

$scope.click = function() { 
    func1(); 
    func2(); 
} 

Эта реализация имеет несколько преимуществ по сравнению с добавлением двух функций на ng-click

  • Во-первых, оно уменьшает количество наблюдателей, так как у нас есть только одинscope, тогда как при добавлении двух функций к ng-click вам необходимо определить обе функции в scope.
  • Во-вторых, если ваш func2() является условным, это зависит от вывода func1(), вы можете решить, следует ли запускать func2() или нет.
0

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

Например: func1() будем называть первым, то func2() ...

Смежные вопросы