Angularjs将数据从配置控制器传递给其他控件

时间:2014-03-22 00:29:45

标签: angularjs

我有一种情况我想将数据从控制(在配置内)传递到外部控制器。我已经尝试过工厂传递数据,但是在数据发生变化之后,它仍然保持为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);            
        })
    }

1 个答案:

答案 0 :(得分:1)

如果您希望值保持同步 - 无论加载顺序如何,那么您应该使用$ scope。这就是它的设计目标。

根据您对该值的处理方式,您有多种选择。

在视图中显示值

$scope.displayId = idService.get()或者更好的是,为什么不添加$rootScope的ID并从那里访问它?

您希望在navCtrl中值更改时收到通知,以便您可以进行进一步处理

您可以在DynamicCtrl中使用$rootScope.$broadcast('routeParamIdChanged', id),然后使用$scope.$on('routeParamIdChanged, fn(ev, id){})侦听更改,也可以创建一个检查服务的$watch