在 ng-click 指令中调用多个函数是否有缺点?

Is there a drawback of calling more than one function in a ng-click directive?

我们在一个 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
}

没有区别,它们都和另一个(我认为更好)选项一样有效

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

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

是的,第一种方法是正确的。 ng-click 询问一个有效的 AngularJS expression 并计算相同的值,不管它是单个或多个函数或任何其他表达式,如 "anyVar = 'Button Clicked'"

所以下面这些例子是正确的

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

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

两种方式都没有问题,但我会在 $scope 中只声明 1 个函数,而在 JS 中只声明另外 2 个函数:

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

func1() {
  // something
}

func2() {
  // something
}

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

在一次 ng-click 中调用两个函数是一种不好的做法。当您决定要添加第三个功能时会发生什么?如果您只希望第二个函数在满足特定条件时发生怎么办?在您的演示代码中放置比必要更多的逻辑是关注点分离不佳。

所有的方法都是正确的。但是我们可以将这两个函数 func1()func2() 作为 JS 函数而不是 scope 函数,并使用 ng-click.[=23= 在你的新作用域函数中调用它们]

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.
  • 中的函数
  • 其次,如果 运行ning 你的 func2() 是有条件的,即它取决于 func1() 的输出,你可以决定是否 运行 [=13] =] 与否。

不,没有缺点,但这不是好的做法...无论您是在 ng-click 中调用函数还是在控制器中的另一个函数中调用函数,都没有区别。而且,如果您在 ng-click 中调用函数,那么它们将按照它们在那里编写的顺序调用。

例如:func1() 将首先调用 func2()...

不,在 ng-click 中调用多个函数没有任何缺点,但大多数时候我们不得不忽略它,因为这不是一个好习惯。

您可以通过在另一个函数中调用一个函数来实现。

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

所以这里func1会先调用,然后是func2和func3。