我试图在另一个文件中使用一个文件的全局变量。我让它从原始文件(controller.js)工作到html文件,但我不能让它从controller.js工作到service.js.
我对棱角分明的事物还很陌生,正试图弄清楚这一点。
您似乎想要在控制器中声明一个变量,以便您的服务可以向该变量写入数据。你需要考虑另一种方式,通过依赖注入将服务传递给你的控制器
app.controller('homeCtrl', function($scope, myServiceIsNowInjected){
})
然后在控制器中调用该服务的方法:
myServiceIsNowInjected.getDataFromServer('my param');
然后,您将遇到从服务器获取数据是异步的问题,因此您需要使用angular promise,以便在收到数据时将结果分配给作用域上的变量。以上,仍在您的控制器中将变为:
myServiceIsNowInjected.getDataFromServer('my param').then(function(data){
$scope.viewvar = data;
}, function(err){ console.log(err) });
通过这种方式,您不是将全局变量传递给服务,让服务将数据写入该变量,而是要求服务执行一些任务,并让控制器将该任务的结果写入$scope,使其可用于视图。
如前所述,这里提供了一个完整的解决方案示例。
$rootScope
应该而不是用于这种事情——随着应用程序的增长,它会给您带来问题,而使用从服务中提取信息的模块化控制器则不会。
一个选项是使用$rootScope。
在您定义的控制器中:
$rootScope.variable = 'your value';
然后,在一个服务或另一个控制器中使用它:
Console.log($rootScope.variable);
请记住在控制器/服务定义中注入$rootScope(就像使用$scope一样)。