Одне, що вам слід знати, - префікс $ стосується кутового методу, префікси $$ - це кутові методи, яких вам слід уникати.
нижче - приклад шаблону та його контролерів, ми вивчимо, як $ 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.
$ трансляція проти $ емісія
Яку нам використовувати? $ трансляція буде спрямовуватися до всіх елементів дитячого дому, а $ emit буде спрямовувати протилежний напрям до всіх елементів дому предка.
Найкращий спосіб уникнути вирішення між $ emit або $ Broadcast - це канал з $ rootScope та використання $ мовлення для всіх його дітей. Що значно полегшує наш випадок, оскільки елементи нашого дому - це брати і сестри.
Додавання $ rootScope і дозволяє $ мовлення
app.controller('FirstCtrl', function($rootScope, $scope){
$scope.register = function(){
$rootScope.$broadcast('BOOM!', $scope.name)
}
});
Зверніть увагу, що ми додали $ rootScope і тепер використовуємо $ Broadcast (BroadName, аргументи). Для BroadName ми хочемо дати йому унікальну назву, щоб ми могли зловити це ім’я в нашому secondCtrl. Я вибрав БУМ! задля розваги. Другий аргумент «аргументи» дозволяє нам передавати значення слухачам.
Отримання нашого мовлення
У другому контролері нам потрібно встановити код, щоб слухати нашу трансляцію
app.controller('SecondCtrl', function($scope){
$scope.$on('BOOM!', function(events, args){
console.log(args);
$scope.name = args; //now we've registered!
})
});
Це дійсно так просто. Живий приклад
Інші способи досягнення подібних результатів
Постарайтеся уникати використання цього набору методів, оскільки це не є ні ефективним, ні простим у обслуговуванні, але це простий спосіб виправити неполадки.
Зазвичай ви можете зробити те ж саме, скориставшись сервісом або спростивши контролери. Ми не будемо обговорювати це детально, але я подумав, що просто зазначу це для повноти.
Нарешті, пам’ятайте, що насправді корисна трансляція - «знищити» знову, ви можете побачити $ означає, що це метод або об’єкт, створений кодами постачальників. У будь-якому випадку $ знищається, коли контролер знищується, ви можете послухати це, щоб знати, коли ваш контролер видалений.