【发布时间】:2014-03-19 01:32:23
【问题描述】:
您好,我是 Angular 开发新手,我想知道我在控制器之间传递数据的方式是否是不好的做法。
我正在创建一个座位图小部件,您可以通过该小部件单击一个座位,它会使用不同的控制器在应用程序的另一部分显示数据。
1) 我有一个包含动态模板的指令。根据传递的模型(来自 ng-repeat),它将创建一个事件监听器,如下所示:
if(scope.seat.isAvailable) {
element.bind('click', function() {
scope.$emit('clickedSeat', scope.seat);
}
element.append(seatAvailableTemplate);
}
2) 在我的控制器中,我有以下监听点击:
$scope.$on('clickedSeat', function(event, seat) {
seatSelectionService.broadcastSeatData(seat);
}
3) 我有一个 服务,我在其中传入了 $rootScope,它允许我将数据广播到不同的控制器:
var seatSelectionService = {};
seatSelectionService.broadcastSeatData = function(clickedSeat) {
seatSelectionService.seatData = clickedSeat;
$rootScope.$broadcast('seatSelected');
}
return seatSelectionService;
4) 在其他控制器中,我有一个监听器,它设置 $scope 属性,在视图中呈现 {{selectedSeat}}:
$scope.$on('seatSelected', function() {
$scope.selectedSeat = seatSelectionService.seatData;
$scope.apply();
}
当然,我必须将 seatSelectionService 传入两个控制器才能正常工作。
有没有更好的方法来做到这一点?或者这种传递数据的方式是有效的做法吗?
【问题讨论】:
标签: angularjs angularjs-directive angularjs-scope