在控制器中,我想在两个函数之间共享数据。例如:
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个控制器?
答案 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) ;
}