我最近一直在和AngularJS合作,我觉得我可能会认为范式错了。
我有一个窗格控制器(绑定到ng-repeat),用于跟踪用户打开的“窗格”。现在每个窗格都有数据,这意味着几乎所有窗格都有其他控制器。
我读了one answer here (with a similar situation),答案建议将“弹出”控制器重写为服务。
窗格控制器:
app.controller('PaneCtrl', function ($scope, PaneService){
var updatePanes = function(panes){
$scope.panes = panes;
}
// subscribes this controller to the Pane Service
PaneService.registerObserverCallback(updatePanes)
});
服务
app.factory('PaneService', function(){
var observerCallbacks=[]
var panes = []
var notifyObservers = function(){
angular.forEach(observerCallbacks, function(callback){
callback(panes);
});
}
return {
createRootPane: function(title, meta, data){
// do stuff
},
toggleSearchPane: function(){
// do stuff
notifyObservers();
},
registerObserverCallback: function(callback){
observerCallbacks.push(callback);
}
}
});
我的问题是这里的最佳做法是什么,如果最佳做法是“将其重写为仅服务”,那该服务会是什么样的?
答案 0 :(得分:2)
我建议你将其重写为指令并制作模型< =>在指令的控制器中查看关联。
在Angular Documentation下的Creating Directives that Communicate中,有关指令的Angular文档中有一个标签示例。如果要从外部数据源获取数据以填充范围,或使用缓存使用工厂。