您的服務只是作爲可以注入控制器的常見狀態。如果您在服務中公開說validationErrors
對象,那麼您只需將其綁定到任何本地控制器作用域,並且任何更新都應該傳播到使用它的所有控制器。這應該讓你開始:
http://jsfiddle.net/HB7LU/2863/
服務/控制器代碼:
myApp.factory('errorService', function() {
var cont = { validationErrors: [] };
return {
getErrorList: function() { return cont; }
}
});
function MyCtrl($scope, errorService) {
$scope.es = errorService.getErrorList();
$scope.es.validationErrors.push('Some error');
}
function MyOtherCtrl($scope, errorService) {
$scope.es = errorService.getErrorList();
$scope.es.validationErrors.push('Some other error');
}
視圖(使用相同的服務2次):
<div ng-controller="MyCtrl">
<div ng-repeat="err in es.validationErrors">{{err}}</div>
</div>
<div ng-controller="MyOtherCtrl">
<div ng-repeat="err in es.validationErrors">{{err}}</div>
</div>
編輯:
在下面的評論之後,我意識到你只是試圖創建一個可重用的函數,而不是必須保持控制器之間的通用狀態。在這種情況下,請將您的$scope
轉換爲您的服務中的常用功能。
myApp.factory('errorService', function() {
return {
errorLog: function(scope, error) {
// empty old validation errors
scope.validationErrors.length = 0;
// get new validation errors
var obj = error.data.ModelState;
for (var key in obj) {
scope.validationErrors.push(obj[key]);
}
}
}
}
內。然後你的任何控制器,注入errorService
,而簡單地將POST結果,與控制器範圍一起,例如:
errorService.errorLog($scope, postError);
而且,你並不真的需要通過範圍根目錄到您的案例中的服務。你可以簡單地通過$scope.validationErrors
。一切取決於你想要的。
這個結構'error.data.ModelState'對所有的控制器都是一樣的嗎? – dmahapatro
是的,所有人都一樣。 – peter