สิ่งหนึ่งที่คุณควรรู้คือ $ prefix อ้างอิงถึง Angular Method คำนำหน้า $$ หมายถึงวิธีเชิงมุมที่คุณควรหลีกเลี่ยง
ด้านล่างนี้เป็นตัวอย่างเทมเพลตและตัวควบคุมเราจะสำรวจว่า $ broadcast / $ on สามารถช่วยให้เราบรรลุสิ่งที่เราต้องการได้อย่างไร
<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>
ตัวควบคุมคือ
app.controller('FirstCtrl', function($scope){
$scope.register = function(){
}
});
app.controller('SecondCtrl', function($scope){
});
คำถามของฉันคือคุณจะส่งชื่อไปยังคอนโทรลเลอร์ที่สองอย่างไรเมื่อผู้ใช้คลิกลงทะเบียน? คุณอาจเกิดปัญหาหลายอย่าง แต่วิธีที่เราจะใช้คือการใช้ $ broadcast และ $ on
$ broadcast เทียบกับ $ emit
เราควรใช้แบบไหน $ Broadcast จะออกอากาศลงไปยังองค์ประกอบของลูกทั้งหมดและ $ emit จะส่งสัญญาณทิศทางตรงข้ามกับองค์ประกอบทั้งหมดของ Dom
วิธีที่ดีที่สุดในการหลีกเลี่ยงการตัดสินใจระหว่าง $ emit หรือ $ broadcast คือการทำช่องทางจาก $ rootScope และใช้ $ broadcast กับลูก ๆ ทุกคน ซึ่งทำให้กรณีของเราง่ายขึ้นมากเนื่องจากองค์ประกอบ dom ของเราเป็นพี่น้อง
เพิ่ม $ rootScope และให้ $ broadcast
app.controller('FirstCtrl', function($rootScope, $scope){
$scope.register = function(){
$rootScope.$broadcast('BOOM!', $scope.name)
}
});
หมายเหตุเราได้เพิ่ม $ rootScope และตอนนี้เรากำลังใช้ $ broadcast (broadcastName, arguments) สำหรับ BroadcastName เราต้องการตั้งชื่อที่ไม่ซ้ำกันเพื่อให้เราสามารถตรวจจับชื่อนั้นใน secondCtrl ของเรา ฉันเลือกบูมแล้ว! แค่เล่น ๆ. ข้อโต้แย้งที่สอง 'ข้อโต้แย้ง' ช่วยให้เราสามารถส่งผ่านค่าไปยังผู้ฟัง
รับการออกอากาศของเรา
ในตัวควบคุมที่สองของเราเราต้องตั้งค่ารหัสเพื่อฟังการออกอากาศของเรา
app.controller('SecondCtrl', function($scope){
$scope.$on('BOOM!', function(events, args){
console.log(args);
$scope.name = args; //now we've registered!
})
});
มันง่ายจริงๆ ตัวอย่างสด
วิธีอื่น ๆ เพื่อให้ได้ผลลัพธ์ที่คล้ายกัน
พยายามหลีกเลี่ยงการใช้ชุดวิธีการนี้เนื่องจากไม่มีประสิทธิภาพหรือบำรุงรักษาง่าย แต่เป็นวิธีง่ายๆในการแก้ไขปัญหาที่คุณอาจมี
โดยปกติคุณสามารถทำสิ่งเดียวกันได้โดยใช้บริการหรือทำให้ตัวควบคุมของคุณง่ายขึ้น เราจะไม่พูดถึงเรื่องนี้ในรายละเอียด แต่ฉันคิดว่าฉันแค่พูดถึงมันเพื่อความสมบูรณ์
สุดท้ายอย่าลืมว่าการออกอากาศที่มีประโยชน์จริงๆที่จะฟังคือ '$ destroy' อีกครั้งคุณจะเห็น $ หมายความว่าเป็นวิธีหรือวัตถุที่สร้างขึ้นโดยรหัสผู้ขาย Anyways $ destroy ถูกออกอากาศเมื่อคอนโทรลเลอร์ถูกทำลายคุณอาจต้องการฟังสิ่งนี้เพื่อรู้ว่าเมื่อใดที่คอนโทรลเลอร์ของคุณถูกลบ