我正在尝试从另一个文件中的一个文件中使用全局变量。我有它从原始文件(controller.js)到html文件,但我不能让它从controller.js到service.js。
我在棱角分明的时候是个新人,试图弄明白这一点。
答案 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一样)。