2
我有2個控制器不在同一個範圍內或有一個父子關係。如何從服務調用控制器功能?
所以我想從controlleB調用ControllerA中的一個函數。在我的情況下,它是一個帶有addItem函數的listContoller,我想在單擊提交後從頁面上其他位置的addItemController調用此函數。我知道這應該與服務,但我不知道如何。
app.controller("listCtrl", ["$scope", "listSvc", function ($scope, listSvc){
$scope.list.data = listSvc.load("category");
$scope.addItem = function(newitem) {
$scope.list.data.unshift(newitem);
...
}
}]);
app.controller("addItemCrtl", ["$scope", "listSvc", function ($scope, listSvc){
$scope.addItem = function() {
listSvc.addItem($scope.newItem);
}
}]);
app.service('listSvc', function() {
return{
load: function(section){
...
},
addItem: function(item){
addItem(item); <<-- call function in listController
}
}
});
UPDATE
k是這更好的?我把list.data放在我的服務裏面,如果列表發生變化,並且把它放在我的控制器的範圍內,那麼ng-repeat可以完成他的工作......我的控制器更好嗎?或有更好的人提示我應該怎麼做呢?
app.service('listSvc', ['$http', function($http) {
var list = {};
return {
list:{
get: function() {
return list.data;
},
set: function (data) {
list.data = data;
}
},
addItem: function(item){
var response = $http.post("/api/album/"+$scope.list.section, item);
response.success(function(){
list.data.unshift(item);
console.log("yeah success added item");
}).error(function(){
console.log("buuuh something went wrong");
});
return response;
},
load: function(section){
var response = $http.get("/api/album/"+section);
response.success(function(data){
list.set(data);
list.section = section;
console.log("yeah success loaded list");
}).error(function(){
console.log("buuuh something went wrong");
});
return response;
}
};
}]);
,並在我的控制器,我這樣做
app.controller("listCrtl", ["$scope", "listSvc", function ($scope, listSvc){
listSvc.load("category");
...
$scope.$watch('listSvc.list.get()', function(data) {
$scope.list.data = data;
});
...
}]);
app.controller("addItemCrtl", ["$scope", "listSvc", function ($scope, listSvc){
...
$scope.addItem = function() {
listSvc.addItem($scope.newItem);
}
...
}]);
格雷戈爾;)
你不能在服務中包含$ scope。那麼你怎麼能想到從服務中調用一個函數呢.. – Ved
不要!這是糟糕的設計。 – pixelbits
是的,這是真的:)所以這個問題應該如何解決?我是否應該將我的控制器中的所有邏輯放入我的服務中? –