gpt4 book ai didi

javascript - 在 http.get 之后从另一个 Controller 更新一个 Controller 中变量的值?

转载 作者:数据小太阳 更新时间:2023-10-29 06:01:01 24 4
gpt4 key购买 nike

我有两个 Controller 。我想使用服务将变量从一个 Controller 更新到另一个 Controller ,但它没有更新。

我希望 Controller “select”中的变量 $scope.names 在 Controller “current”中更新并显示它

app.controller('select', ['$scope', '$http', 'myService', function($scope,$http, myService) {
$http.get('/myapp/stocknames').
success(function(data) {
$scope.names=data;
myService.names=data;
});
}]);

我正在使用 myService 在两个 Controller 之间交换数据。我已经在我的服务中声明。

app.service('myService', function($http, $rootScope) {
this.names=[]
});

app.controller('current', ['$scope', '$http', 'myService', function($scope,$http, myService) {
$scope.names=myService.names;
console.log($scope.names);
}]);

你能帮忙吗?一旦选择 Controller 中的 $scope.names 变量更新,我应该如何让当前 Controller 更新数据?

根据我的说法,我正在做的应该有效:-/

最佳答案

有很多方法可以存档:

首先:通过观察服务变量数据的变化

var app = angular.module('plunker', []);

app.service('dataService', function() {
this.serviceData = "test";
});

app.controller('MainCtrl', function($scope, dataService) {
$scope.mainClickHandler = function(mainData) {
dataService.serviceData = mainData;
}
});


app.controller('SubCtrl', function($scope, dataService) {
$scope.name = 'World';

$scope.getServiceData = function() {
return dataService.serviceData;
}

$scope.$watch("getServiceData()", function(newValue, oldValue) {
if (oldValue != newValue) {
$scope.name = newValue;
}
});
});

http://plnkr.co/edit/G1C81qvDD179NILMMxWb

第二个:

使用事件广播

var app = angular.module('plunker', []);

app.factory('dataService', function($rootScope) {
var serviceData = {
"mydata": "test"
};

$rootScope.$watch(function() {
return serviceData.mydata;
}, function(newValue, oldValue, scope) {
$rootScope.$broadcast('dataService:keyChanged', newValue);
}, true);

return serviceData;

});

app.controller('MainCtrl', function($scope, dataService) {
$scope.mainClickHandler = function(mainData) {
dataService.mydata = mainData;
}
});


app.controller('SubCtrl', function($scope, $rootScope, dataService) {
$scope.name = 'World';

$rootScope.$on('dataService:keyChanged', function currentCityChanged(event, value) {
console.log('data changed', event, value);
$scope.name = value;
});

});

http://plnkr.co/edit/tLsejetcySSyWMukr89u?p=preview

第三:

使用回调

var app = angular.module('plunker', []);

app.service('dataService', function() {
var serviceData = "test";
var callback = null;
this.updateServiceData = function(newData){
serviceData = newData;
if(null!==callback)
{
callback();
}
};

this.getServiceData = function(){
return serviceData;
};

this.regCallback = function(dataCallback){
callback = dataCallback;
};
});

app.controller('MainCtrl', function($scope, dataService) {
$scope.mainClickHandler = function(mainData) {
dataService.updateServiceData(mainData);
}
});


app.controller('SubCtrl', function($scope, dataService) {
$scope.name = 'World';
$scope.dataChangeCalback = function() {
$scope.name = dataService.getServiceData();
}
dataService.regCallback($scope.dataChangeCalback);
});

http://plnkr.co/edit/vrJM1hqD8KwDCf4NkzJX?p=preview

关于javascript - 在 http.get 之后从另一个 Controller 更新一个 Controller 中变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36733651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com