angularjs在函数之间共享变量

时间:2016-03-02 06:49:11

标签: angularjs scope

在控制器中,我想在两个函数之间共享数据。例如:

controllers.controller('rightDrawerCtrl', function ($scope, $http) {
  $scope.shared_id;

  $scope.getId = function ()  {
  // get the id via $http, using a secondary id to retrieve the shared_id
  }

  $scope.useId = function () {
  // use the shared_id to make a different api call
  }

});

但是在这个例子中,当调用useId()时,shared_id是未定义的。

我认为这是因为useId是'创建'而shared_id未定义,所以没有收到新值的通知。

我发现解决此问题的唯一方法是使用两个控制器:Share data between AngularJS controllers

有没有更好的方法,只使用1个控制器?

4 个答案:

答案 0 :(得分:1)

$scope.shared_id;

在上述声明之后,shared_id的{​​{1}}变量应该是未定义的 - 因为您还没有为其分配任何值。

尽管如此,变量仍然可以在任何范围函数中访问,因为$scope对于它们是全局的。并且不要忘记你应该像$scope一样在所有地方访问它。

但是,如果您按以下方式初始化它:

$scope.shared_id

..它不会返回undefined。

您也可以通过$scope.shared_id = 'no id'; 初始化此变量。

答案 1 :(得分:0)

当getId()函数从$ http请求获得结果时,调用userId()函数。

答案 2 :(得分:0)

看起来我只需要在$ scope中包装变量赋值。$ apply

$scope.$apply(function() {
  $scope.shared_id = 1234;
});

答案 3 :(得分:0)

您可以使用这样的this更容易。

var self = this;
this.shared_id;


  $scope.getId = function ()  {
    console.log(self.shared_id) ;
  }

  $scope.useId = function () {
    console.log(self.shared_id) ;
  }