在angularjs中使用全局变量

时间:2016-05-02 15:07:56

标签: angularjs global-variables

我正在尝试从另一个文件中的一个文件中使用全局变量。我有它从原始文件(controller.js)到html文件,但我不能让它从controller.js到service.js。

我在棱角分明的时候是个新人,试图弄明白这一点。

2 个答案:

答案 0 :(得分:3)

您似乎想要在控制器中声明一个变量,以便您的服务可以将数据写入该变量。您需要以相反的方式考虑它,通过依赖注入将服务传递给您的控制器

app.controller('homeCtrl', function($scope, myServiceIsNowInjected){

})

然后在控制器中调用该服务的方法:

myServiceIsNowInjected.getDataFromServer('my param');

然后,您将遇到从服务器获取数据是异步的问题,因此您需要使用角度承诺,以便在收到数据时将结果分配给范围内的变量。以上,仍在您的控制器中将成为:

myServiceIsNowInjected.getDataFromServer('my param').then(function(data){
  $scope.viewvar = data;       
}, function(err){ console.log(err) });

通过这种方式,不是将全局变量传递给服务以将数据写入该变量,而是要求服务执行某项任务,并让控制器将该任务的结果写入$范围,使其可用于视图。

完整的解决方案示例正如前面提到的那样here

$rootScope应该用于此类事情 - 它会在您的应用程序增长时导致问题,而使用从服务中提取信息的模块化控制器则不会。

答案 1 :(得分:0)

一种选择是使用$ rootScope。

在控制器中定义:

$rootScope.variable = 'your value';

然后,在服务或其他控制器中使用它:

Console.log($rootScope.variable);

请记住在控制器/服务定义中注入$ rootScope(就像使用$ scope一样)。