我有一种情况我想将数据从控制(在配置内)传递到外部控制器。我已经尝试过工厂传递数据,但是在数据发生变化之后,它仍然保持为0(不知道我做错了哪里)有没有办法可以将数据传递给 navCtrl 之后DynamicController改变了吗?谢谢你的帮助
var app = angular.module('fccrm', ['ngRoute']);
app.factory('idService', function(){
var id = 0;
var itemsService = {};
itemsService.set = function(val) {
id = val;
};
itemsService.get = function() {
return id;
};
return itemsService;
})
app.controller('navCtrl', ['$scope', 'idService', function($scope, idService){
$scope.disable = 'disabled';
console.log(idService.get());
}])
app.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/:page/:id', {
template: '',
controller: DynamicController
});
}])
function DynamicController($scope, $routeParams, $http, idService)
{
var templateUrl = '/index.php?controller=lead&action=' + $routeParams.page + '&id=' + $routeParams.id;
idService.set($routeParams.id);
$http.post(templateUrl).success(function(data){
$('#content').html(data);
})
}
答案 0 :(得分:1)
如果您希望值保持同步 - 无论加载顺序如何,那么您应该使用$ scope。这就是它的设计目标。
根据您对该值的处理方式,您有多种选择。
$scope.displayId = idService.get()
或者更好的是,为什么不添加$rootScope
的ID并从那里访问它?
您可以在DynamicCtrl中使用$rootScope.$broadcast('routeParamIdChanged', id)
,然后使用$scope.$on('routeParamIdChanged, fn(ev, id){})
侦听更改,也可以创建一个检查服务的$watch
。