如何在angularjs中从一个控制器动态获取数据?

时间:2017-01-25 04:09:21

标签: javascript angularjs controller

.controller('Ctrl1', function($scope, $http) {

  $scope.langChecked = function(){
   $scope.value = $('input[name=lang-check]:checked').val();
    console.log($scope.value);
  };
})

.controller('Ctrl2', function($scope, $http, $state, Scopes) {
    if($scope.value='something'){
         alert('scope passed');
    }
});

我尝试使用rootscope并在控制器之间传递值

.run(function ($rootScope) {
    $rootScope.$on('scope.stored', function (event, data) {
        console.log("scope.stored", data);
    });
})
.factory('Scopes', function ($rootScope) {
    var mem = {};

    return {
        store: function (key, value) {
            $rootScope.$emit('scope.stored', key);
            mem[key] = value;
        },
        get: function (key) {
            return mem[key];
        }
    };
});

但我的ctrl2页面在刷新时首先加载,当我使用

时它会出错
Scopes.get('Ctrl1').value;
在Ctrl2中

。请帮忙

2 个答案:

答案 0 :(得分:2)

您必须使用$rootscope注入工厂。

  

工厂无权访问当前的控制器/指令范围   因为没有一个。他们确实有权访问。的根   应用虽然这就是$ rootScope可用的原因

.factory('Scopes',["$rootScope", function ($rootScope) {
    var mem = {};

    return {
        store: function (key, value) {
            $rootScope.$emit('scope.stored', key);
            mem[key] = value;
        },
        get: function (key) {
            return mem[key];
        }
    };
}]);

答案 1 :(得分:0)

.factory('Authorization', function() {
  authorization = {};
  authorization.variable= '';
  return authorization;
})

.controller('Ctrl1', function($scope, Authorization) {
  $scope.input = Authorization;
  console.log($scope.input.variable);
})

.controller('Ctrl2', function($scope, Authorization) {
  $scope.input = Authorization;
  console.log($scope.input.variable);
 });

<input data-ng-controller="Ctrl1" type="text" ng-model="input.variable">

这对我有用。谢谢你的答案:)我正在使用带角度的离子。使用工厂来存储数据和获取工作就像一个魅力。