Làm cách nào để thêm nhiều chức năng trong MỘT ng-click?


293

Tôi đang tìm cách thực hiện điều này nhưng tôi không thể tìm thấy bất cứ điều gì liên quan cho đến nay :( Tôi có thể lồng cả hai chức năng có nhưng tôi chỉ tự hỏi liệu điều này có thể không? Tôi muốn làm điều này theo nghĩa đen:

<td><button class="btn" ng-click="edit($index) open()">Open me!</button></td>

Mã JS của tôi tại thời điểm này:

$scope.open = function () {
  $scope.shouldBeOpen = true;
};      

$scope.edit = function(index){

  var content_1, content_2;
      content_1 = $scope.people[index].name;
      content_2 = $scope.people[index].age;

  console.log(content_1);
};

Tôi muốn gọi hai chức năng chỉ bằng một cú nhấp chuột, làm thế nào tôi có thể làm điều này trong angularJS? Tôi nghĩ rằng nó sẽ đơn giản như trong CSS khi bạn thêm nhiều lớp ... nhưng không phải là :(

Câu trả lời:


652

Bạn có 2 lựa chọn:

  1. Tạo một phương thức thứ ba bao bọc cả hai phương thức. Ưu điểm ở đây là bạn đặt ít logic hơn trong mẫu của bạn.

  2. Mặt khác, nếu bạn muốn thêm 2 cuộc gọi trong ng-click, bạn có thể thêm ';' sau edit($index)như thế này

    ng-click="edit($index); open()"

Xem tại đây: http://jsfiddle.net/laguiz/ehTy6/


1
Tôi đã sử dụng phương thức hai (không cần thiết), nhưng lý do nào khiến không có hai cuộc gọi trong một ng-click?
Dave Everitt

1
Đó là lý do tại sao tôi đưa ra 2 lựa chọn. Cá nhân tôi thích bọc các cuộc gọi trong bộ điều khiển của mình nhưng điều đó tùy thuộc vào bạn.
Tối đa

4
Không có vấn đề gì với tùy chọn 2 nhưng tùy chọn 1 sạch hơn vì bạn nên tránh thêm mã và logic vào chế độ xem của mình. Sẽ tốt hơn nếu bạn cần sửa đổi một cái gì đó trong tương lai.
Dani Barca Casafont

5
Trong trường hợp của riêng tôi, Tùy chọn 2 có nghĩa là tránh thêm một chức năng phổ biến bên trong một lệnh, có lẽ chậm hơn và chắc chắn khó bảo trì hơn.
Alex

2
Tùy chọn 1 cũng cung cấp cho bạn thêm một chức năng không cần thiết phải kiểm tra
Parris Varney

18

Bạn có thể gọi nhiều hàm bằng ';'

ng-click="edit($index); open()"

8

Rất nhiều người sử dụng tùy chọn (click) vì vậy tôi cũng sẽ chia sẻ điều này.

<button (click)="function1()" (click)="function2()">Button</button>

4
Sử dụng (click) = "function (); function2 ()" cũng hoạt động. Tôi chỉ thấy rằng ra và muốn chia sẻ.
amlane86

Tôi thấy điều này hữu ích khi ràng buộc keyup.enter. Việc ;phân tách không hoạt động vì các phương thức không phải lúc nào cũng thực hiện theo thứ tự.
xandermonkey

2

Thử cái này:

  • Tạo một bộ sưu tập các chức năng
  • Tạo một hàm lặp qua và thực thi tất cả các hàm trong bộ sưu tập.
  • Thêm chức năng vào html
array = [
    function() {},
    function() {},
    function() {}
]

function loop() {
    array.forEach(item) {
        item()
    }
}

ng - click = "loop()"

1

Thực hiện theo dưới đây

ng-click="anyFunction()"

anyFunction() {
   // call another function here
   anotherFunction();
}

-15
ng-click "$watch(edit($index), open())"

1
Cú pháp ở đây không chính xác. Như đã giải thích ở trên, dấu chấm phẩy là dấu phân cách; không phải dấu phẩy ... Trong số những thứ khác ...
Erik Grosskurth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.