我有事件從我服務的服務加載列表的diretive:
.directive('appointments', [function() {
return {
restrict: 'CE',
scope: {
ngTemplate: '=',
},
controller: ['$scope','calendarService', function ($scope, calendarService) {
var vm = this;
vm.events = calendarService.getEvents();
}],
controllerAS:'vm',
link: function (scope, elem, attrs) {
scope.getTemplateUrl = function() {
if (angular.isDefined(scope.ngTemplate))
return scope.ngTemplate;
else
return "/list.directive.html";
}
},
template: '<div ng-include="getTemplateUrl()"></div>'
}
}])
現在在另一個指令我更新這份名單,我怎麼可以更新第一個控制器列表?在第一個指令使用
此:
.directive('appointmentsUpdate', [function() {
return {
restrict: 'CE',
scope: {
ngEventId: '=',
},
controller: ['$scope','calendarService', function ($scope, calendarService) {
var vm = this;
vm.update = calendarService.updateEvent(scope.ngEventId).then(function(res){
// Here is where the newly created item, should be added to the List (vm.events) from first directive
)
});
}],
controllerAS:'vm',
link: function (scope, elem, attrs) {
scope.getTemplateUrl = function() {
if (angular.isDefined(scope.ngTemplate))
return scope.ngTemplate;
else
return "/list.directive.html";
}
},
template: '<div ng-include="getTemplateUrl()"></div>'
}
}])
這是正確的方法嗎? –
是的,你可以做到這一點,並將永遠工作,因爲它的一個角度特徵。但它不僅是你可以使用service.but的方式,但它的超級容易實現。 –
我認爲這是兩條指令之間溝通的正確途徑。使用$ broadcast和$ emit將創建鬆散耦合的指令。我的建議是使用$ scope。$ broadcast,如果您的'appointmentmentsUpdate'指令是'約會'指令的子元素。 $ rootScope將把事件廣播到應用程序中的所有子範圍。 –