2013-04-11 33 views
8

Trong ví dụ này, tôi có 2 ng-class, mỗi phương thức gọi phương thức điều khiển khác nhau, vì lý do nào đó mỗi phương thức được gọi 3 lần, có ý tưởng nào không? Lỗi có thể xảy ra?Phương thức ng lớp được gọi nhiều lần

var navList = angular.module('navList', []); 

navList.controller('navCtrl', ['$scope', '$location', function ($scope, $location) { 
    $scope.firstClass = function() { 
     console.log('firstClass'); 
     return 'label label-success' ; 
    };  
    $scope.secondClass = function() { 
     console.log('secondClass'); 
     return 'label' ; 
    };  

}]); 

http://jsfiddle.net/uDPHL/72/

Cảm ơn

+0

Nếu mục tiêu của bạn là có các lớp có điều kiện cho nhãn của bạn, hãy xem bài đăng SO này: http://stackoverflow.com/a/15664427/1036025 – jpmorin

Trả lời

7

Nó không phải là một lỗi. Khi Angular biên dịch một cái gì đó như ng-class="firstClass()", nó thiết lập một đồng hồ $ cho nó. Vòng lặp thông báo có thể đánh giá từng đồng hồ $ nhiều lần:

Góc đi vào vòng lặp $ digest. Vòng lặp được tạo thành từ hai vòng nhỏ hơn xử lý hàng đợi $ evalAsync và danh sách $ watch. Vòng lặp $ digest tiếp tục lặp lại cho đến khi mô hình ổn định, có nghĩa là hàng đợi $ evalAsync trống và danh sách $ watch không phát hiện bất kỳ thay đổi nào. - Overview doc

Cũng

Sau một watcher được đăng ký với phạm vi, fn nghe được gọi là không đồng bộ (thông qua $ evalAsync) để khởi tạo người quan sát. Trong trường hợp hiếm hoi, điều này là không mong muốn bởi vì người nghe được gọi khi kết quả của watchExpression không thay đổi. - $watch docs

Vì vậy, ít nhất hai lần dự kiến.

Các vấn đề liên quan