Javascript Angular.js-使功能在其他控制器中可用
我有一个名为SubmissionTreeController的角度控制器,它有update_dashboard()函数,每分钟刷新一次ui 我的目标是在来自不同控制器的post请求成功时刷新ui 如何使此功能在其他控制器中可用Javascript Angular.js-使功能在其他控制器中可用,javascript,angularjs,Javascript,Angularjs,我有一个名为SubmissionTreeController的角度控制器,它有update_dashboard()函数,每分钟刷新一次ui 我的目标是在来自不同控制器的post请求成功时刷新ui 如何使此功能在其他控制器中可用 var module = angular.module("submissionDashboard", ['ui.tree', 'ngCookies', 'ui.bootstrap',]); module.controller("SubmissionTreeControl
var module = angular.module("submissionDashboard", ['ui.tree', 'ngCookies', 'ui.bootstrap',]);
module.controller("SubmissionTreeController", ["$scope", "$http", "$modal",
function($scope, $http, $modal) {
$scope.selected_items = {};
var update_dashboard = function() {
var url = Django.url('submission:active_list_ajax', {
site : site
});
$http.get(url).success(function(data) {
$scope.list = data.results;
});
};
update_dashboard();
$scope.closeTask = function(scope) {
var modalInstance = $modal.open({
templateUrl: 'modal_close_submission_renderer.html',
controller: 'ModalCloseSubmissionController',
resolve: {
items: function () {
return $scope.selected_items;
}}
});
};
}]);
module.controller('ModalCloseSubmissionController', ['$scope', '$modalInstance', '$http', 'items', function ($scope, $modalInstance, $http, items) {
$scope.items = items;
$scope.selected = {
item: 1,
text: ''
};
$scope.ok = function () {
var val = $scope.selected.item;
if (val === 1) {
var url = Django.url('submission:close-notify', {
site : site
});
$http.post(url, $scope.selected_items).success(function(data) {
update_dashboard();
});
} else if (val === 2) {
var url = Django.url('submission:close', {
site : site
});
$http.post(url, $scope.selected_items).success(function(data) {
update_dashboard();
});
} else if (val === 3) {
var url = Django.url('submission:cancel', {
site : site
});
$http.post(url, $scope.selected_items).success(function(data) {
update_dashboard();
});
};
$modalInstance.close($scope.selected.item);
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
}]);
编辑:
我想做的是:
module.service('updateDashboardService', function($scope, $http){
this.update_dashboard = function() {
$scope = $scope;
var url = Django.url('submission:active_list_ajax', {
site : site
});
$http.get(url).success(function(data) {
$scope.list = data.results;
});
};
});
module.controller("SubmissionTreeController", ["$scope", "$http", "$modal", "updateDashboardService", function($scope, $http, $modal, updateDashboardService) {
$scope.selected_items = {};
updateDashboardService.update_dashboard();
var timer = setInterval(function() {
$scope.$apply(updateDashboardService.update_dashboard($scope, $http));
}, 1000 * 60);
我得到的是:
错误:[$injector:unpr]未知提供程序:$scopeProvider正如@Gopesh所说的创建工厂方法,或者,您可以在SubmissionTreeController中执行类似操作:
$scope.$on("event:updateDashboard", function(){ update_dashboard() });
$http.post(url, $scope.selected_items).success(function(data) {
$scope.$emit("event:updateDashboard");
});
在另一个控制器中:
$scope.$on("event:updateDashboard", function(){ update_dashboard() });
$http.post(url, $scope.selected_items).success(function(data) {
$scope.$emit("event:updateDashboard");
});
创建一个工厂方法,这样它就可以跨控制器使用。你能检查一下我提供的代码吗?我在第一篇文章中添加了一个有效的例子。我将研究scope.emit,因为它可能是在应用程序的不同部分使用函数的更干净的方式。