gpt4 book ai didi

javascript - Angular : is it possible to share data between scopes?

转载 作者:行者123 更新时间:2023-11-28 13:08:31 28 4
gpt4 key购买 nike

例如,我的问题是我是否可以共享范围

我只有一个功能

 $scope.init = function(){
$http({
url: url_for('account/getinfo'),
method: "POST",
data: fields
}).success(function (data, status, headers, config) {


$scope.locations = data.stores;


$scope.currentLocation = data.stores.filter(function(store){

return store.mpos_id == $scope.mposid;
});

if ($scope.currentLocation.length > 0) {
$scope.currentLocation = $scope.currentLocation[0];
}


}).error(function (data, status, headers, config) {
});


};

$scope.currentLocation 是一个对象! 我可以在其他函数中使用这个 obj 数据吗?

尝试使用 angular.copy 和扩展,但没有成功

$scope.getInfo = function(){
$scope.currentLocationData = angular.copy($scope.currentLocation);
}

最佳答案

Angular 中的服务是单例的,因此您可以将此数据存储在服务中并将其注入(inject)到您需要的任何地方。将数据请求分离到服务中已经被认为是最佳实践,因此无论如何您都会创建服务。

这是一个示例:

首先将数据检索逻辑分离到服务中。

angular.module('app').service('accountDataService', AccountDataService);

function AccountDataService($http){
var service = this;

service.getInfo = function(fields){
return $http.post(url_for('account/getinfo'), fields)
.then(function(response){ return response.data.stores; });
}
}

然后创建一个帐户服务以在 Controller /组件之间共享检索到的数据:

angular.module('app').service('accountService', AccountService);

function AccountService(accountDataService){
var service = this;

service.currentLocation = {};
service.locations = [];

service.init = function(fields, mposid){

accountDataService.getInfo(fields).then(function(stores){
service.locations = stores;

var currentLocations = stores.filter(function(store){
return store.mpos_id == mposid;
});

if (currentLocations.length > 0) {
service.currentLocation = currentLocations[0];
}
});
}
}

现在您在 Controller 中所要做的就是注入(inject)accountService

angular.module('app').run(function(accountService){
accountService.init({ /* your fields */ }, '[your mposid]');
});

angular.module('app').controller('myController', MyController);

function MyController($scope, accountService){
$scope.currentLocation = accountService.currentLocation;
}

run(..) 中运行 init 函数只是一个例子。由于 init 函数的异步性质,您最好在路由解析函数或类似函数中运行它。

<小时/>

奖金说明

避免使用$scope将变量传递给 View 。请改用 controllerAs 语法。您可以查看文档以获取有关其工作原理的更多信息,或者我建议您check out the angular 1.x style guide from John Papa .

关于javascript - Angular : is it possible to share data between scopes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44748322/

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