Вот рабочий пример кода, который я написал, чтобы показать, как флажков может быть программно установлен и снят снаружи директивы, используя события. Я использую кнопки в этом примере, но вы также можете вызвать методы изнутри контроллера.
Example in Plunker
Кроме того, в качестве лучшей практики, если вы диспетчерская событие из rootScope и слушать его на rootScope, а также использовать $ испускают вместо $ вещать так, что начинается событие и заканчивается в rootScope и не передается по цепочке областей видимости.
Угловая Код
angular.module('app', [
]).controller('MainController', ['$scope', '$rootScope', function ($scope, $rootScope) {
$scope.list = [{label: 'Camaro'}, {label: 'Chevette'}, {label: 'Corvette'}];
$scope.checkItem = function (label, status) {
$rootScope.$emit('checkItemEvent', {label: label, check: status});
};
}])
.directive('checkboxDirective', function ($rootScope) {
return {
restrict: 'AE',
template: '<input type="checkbox" ng-model="item.checkState"/><span>{{item.label}}</span>',
require: 'ngModel',
scope: {
item: '=ngModel'
},
link: function ($scope) {
console.log('$scope.item', $scope.item);
$rootScope.$on('checkItemEvent', function (event, data) {
console.log('data', data);
if (data.label === $scope.item.label) {
$scope.item.checkState = data.check;
}
});
}
};
});
HTML
<!DOCTYPE html>
<html ng-app="app">
<head>
<link rel="stylesheet" href="style.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.js"></script>
<script src="script.js"></script>
</head>
<body ng-controller="MainController">
<h1>Checkbox demo</h1>
<ul>
<li ng-repeat="item in list">
<checkbox-directive ng-model="item"></checkbox-directive>
</li>
</ul>
<div>
<button ng-click="checkItem('Corvette', true)">Check Corvette</button>
<button ng-click="checkItem('Corvette', false)">Uncheck Corvette</button>
</div>
</body>
</html>
вы говорите, что вы вещать из контроллера? и вы ожидаете ответа на трансляцию на контроллере B (где ваши флажки живут)? –
@Ji_in_coding Да, я делаю это, чтобы предварительно заполнить флажок из вызова API – testing