tôi đã chỉ định một chức năng trong bộ điều khiển của tôi như thế này:IIFE trong AngularJS
$scope.myFunction = function(){ console.log('test'); }
Tôi muốn chức năng này được kích hoạt khi một selectbox đã được thay đổi. Do đó, tôi áp dụng ng-thay đổi trên phần tử chọn như sau:
<select ng-options="..." ng-model="..." ng-change="myFunction();"></select>
Nhưng tôi cũng muốn chức năng myFunction được kích hoạt khi trang của tôi được tải. Vì vậy, tôi nghĩ để biến chức năng của tôi thành một IIFE:
($scope.myFunction = function(){ console.log('test'); }());
Tuy nhiên, bây giờ chức năng này chỉ được kích hoạt khi tải trang và không thay đổi. tôi nhận thấy rằng khi tôi thay đổi ngoặc, chức năng cũng được kích hoạt bởi ng-change:
($scope.myFunction = function(){ console.log('test'); })();
Ai đó có thể giải thích tại sao điều này thậm chí vấn đề?
Cảm ơn rất nhiều!
Các gọi đầu tiên không phải là một IIFE, thứ hai là. – helpermethod
@helpermethod theo bài viết này http://benalman.com/news/2010/11/immediately-invoked-function-expression/, cả hai phiên bản đều là IIFE, với những khác biệt nhỏ 'Các parens như vậy thường chỉ ra rằng biểu thức hàm sẽ được gọi ngay lập tức và biến sẽ chứa kết quả của hàm, chứ không phải chính hàm đó. Điều này có thể giúp ai đó đọc mã của bạn khi gặp phải sự cố khi phải cuộn xuống cuối biểu thức hàm rất dài để xem nó có được gọi hay không.' – Alex