Một điều bạn nên biết là tiền tố $ đề cập đến Phương thức góc, tiền tố $$ đề cập đến các phương thức góc mà bạn nên tránh sử dụng.
bên dưới là một mẫu ví dụ và bộ điều khiển của nó, chúng ta sẽ khám phá cách $ Broadcast / $ trên có thể giúp chúng ta đạt được những gì chúng ta muốn.
<div ng-controller="FirstCtrl">
<input ng-model="name"/>
<button ng-click="register()">Register </button>
</div>
<div ng-controller="SecondCtrl">
Registered Name: <input ng-model="name"/>
</div>
Các bộ điều khiển là
app.controller('FirstCtrl', function($scope){
$scope.register = function(){
}
});
app.controller('SecondCtrl', function($scope){
});
Câu hỏi của tôi cho bạn là làm thế nào để bạn chuyển tên cho bộ điều khiển thứ hai khi người dùng nhấp vào đăng ký? Bạn có thể đưa ra nhiều giải pháp nhưng giải pháp chúng tôi sẽ sử dụng là sử dụng $ Broadcast và $ on.
$ phát sóng so với $ phát ra
Chúng ta nên sử dụng cái nào? $ Broadcast sẽ chuyển xuống tất cả các phần tử dom con và $ emit sẽ chuyển hướng ngược lại với tất cả các phần tử dom tổ tiên.
Cách tốt nhất để tránh quyết định giữa $ emit hoặc $ Broadcast là chuyển kênh từ $ rootScope và sử dụng $ Broadcast cho tất cả các con của nó. Điều này làm cho trường hợp của chúng tôi dễ dàng hơn nhiều vì các yếu tố dom của chúng tôi là anh em ruột.
Thêm $ rootScope và cho phép $ phát sóng
app.controller('FirstCtrl', function($rootScope, $scope){
$scope.register = function(){
$rootScope.$broadcast('BOOM!', $scope.name)
}
});
Lưu ý, chúng tôi đã thêm $ rootScope và bây giờ chúng tôi đang sử dụng $ Broadcast (BroadcastName, argument). Đối với BroadcastName, chúng tôi muốn đặt cho nó một tên duy nhất để chúng tôi có thể bắt được tên đó trong secondCtrl của chúng tôi. Tôi đã chọn BÙM! chỉ để cho vui Các đối số thứ hai 'đối số' cho phép chúng ta truyền các giá trị cho người nghe.
Nhận được phát sóng của chúng tôi
Trong bộ điều khiển thứ hai của chúng tôi, chúng tôi cần thiết lập mã để nghe chương trình phát của chúng tôi
app.controller('SecondCtrl', function($scope){
$scope.$on('BOOM!', function(events, args){
console.log(args);
$scope.name = args; //now we've registered!
})
});
Nó thực sự đơn giản. Ví dụ trực tiếp
Những cách khác để đạt được kết quả tương tự
Cố gắng tránh sử dụng bộ phương pháp này vì nó không hiệu quả cũng không dễ bảo trì nhưng đó là cách đơn giản để khắc phục các sự cố bạn có thể gặp phải.
Bạn thường có thể làm điều tương tự bằng cách sử dụng một dịch vụ hoặc bằng cách đơn giản hóa bộ điều khiển của bạn. Chúng tôi sẽ không thảo luận chi tiết về vấn đề này nhưng tôi nghĩ tôi chỉ muốn đề cập đến nó cho đầy đủ.
Cuối cùng, hãy nhớ rằng một chương trình phát thực sự hữu ích để nghe là '$ hủy' một lần nữa bạn có thể thấy $ có nghĩa là phương thức hoặc đối tượng được tạo bởi mã nhà cung cấp. Dù sao $ phá hủy được phát khi bộ điều khiển bị phá hủy, bạn có thể muốn nghe điều này để biết khi nào bộ điều khiển của bạn bị xóa.