我已在NameService
中定义了一项名为controller.js
的服务。我想在两个不同的控制器中使用NameService
中存在的变量。
我的服务如下
App.service('NameService', function(){
this.Name = "";
this.getName = function(){
return this.Name;
};
this.setName = function(name){
this.Name = name;
}
});
我有一个名为netController
的控制器,我在其中更新Name
中存在的Nameservice
变量的值。我想在page1Controller
中使用更新后的值。
NetController
如下:
App.controller('netController', ['$scope','$http','$window','NameService', function($scope,$http,$window,NameService)
{
$scope.initNet = function()
{
$http.post('/initNet',$scope.network).success(function(response)
{
if(response.status == "true")
{
$scope.$watch('NameService.setName()', function(){
NameService.Name = $scope.network.name;
});
NameService.setName($scope.network.name);
$window.location.href = '/page1';
}
else
{
$scope.error = "Error!";
}
});
}
}]);
如果我在console.log(NameService.netName);
中netController
,则会打印更新后的值。
page1Controller
如下
App.controller('page1Controller', ['$scope', '$http','NameService', function($scope, $http,NameService)
{
console.log(NameService.Name);
}]);
我的console.log(NameService.name);
中的page1Controller
何时发出空字符串。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
使用工厂代替服务
gisApp.factory('NameService', function () {
var _name = "";
return {
getName: function () {
return _name;
},
setName: function (name) {
_name = name;
}
}
});
答案 1 :(得分:0)
因为当您调用打印该变量时,它尚未定义。 $ http 返回承诺,它需要一些时间时间间隔。您是否尝试在 page1Controller 中设置间隔?像
App.controller('page1Controller', ['$scope', '$http','NameService', '$timeout' function($scope, $http,NameService, $timeout)
{
$timeout(function(){
console.log(NameService.name)
},2000);
...
<强>被修改强>
然后尝试这样的事情
gisApp.service('NameService', function(){
return {
Name: '',
getName: function(){
return this.Name;
},
setName: function(name){
this.Name = name;
}
});
因为您使用的语法,您必须使用“ new ”创建该服务的实例,才能将其用作类。