gpt4 book ai didi

javascript - AngularJS - JSON 返回后如何更新 $scope 上的变量

转载 作者:行者123 更新时间:2023-12-02 15:58:37 25 4
gpt4 key购买 nike

我是 Angular 新手,我正在开发一个依赖服务和工厂的项目。我的问题是,当我使用静态 jason 数组进行响应时,变量被正确填充并显示在 View 中,但是当我将其更改为 ajax 请求并从 json 文件获取它时,响应成功,但 Controller 变量未成功加载数据。

这是我的 Angular 项目结构:

'use strict';
angular
.module('mytestapp',['ngRoute'])
.config(config)
.controller('HomeCtrl', HomeCtrl)
.controller('AboutCtrl', AboutCtrl)
.factory('GeneralInit', GeneralInit)
.service('UserSrv', UserSrv);
GeneralInit.$inject = ['UserSrv','$q'];
HomeCtrl.$inject = ['GeneralInit','$timeout','UserSrv'];

这是我的配置:

    function config($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'template/home.html',
controller: 'HomeCtrl',
controllerAs: 'hmc',
resolve: {
GeneralInit: function(GeneralInit){
return GeneralInit();
}}
})
.when('/about', {
templateUrl: 'template/about.html',
controller: 'AboutCtrl',
controllerAs: 'abc',
resolve: {
GeneralInit: function(GeneralInit){
return GeneralInit();
}}
});
}

这是我的服务:

function UserSrv($http) {
var User={};
var service = {
getUser: Get,
updateUser: Update,
logoutUser: Logout
};
return service;

function Get() {
//return {"FirstName":"StaticName","LastName":'StaticLastName'}
$http.get('/user.json')
.success(function(data, status, headers, config) {
User = data;
console.log(User);
return User;
})
.error(function(data, status, headers, config) {

})
}

function Update() {

}

function Logout() {

}

}

我的 Controller 和初始化项目:

function GeneralInit(UserSrv,$q)
{
return function() {
var User = UserSrv.getUser(); //{'FirstName':'FstName','LastName':'LstName'};//
var Base='browser';

return $q.all([User, Base]).then(function(results){
return {
User: results[0],
Base: results[1]
};
});
}
}

function HomeCtrl(GeneralInit,$timeout)
{
var hmc= this;
$timeout(function(){
hmc.User=GeneralInit.User;
console.log(hmc.User);
}
,0);
}

最佳答案

您在 console.log(hmc.User); 语句中看不到任何数据的原因是,当该语句执行时,promise 并未真正得到解决(请求获取用户尚未返回)。尽管由于使用 $timeout 而调用摘要周期,但 hmc.User 还没有数据。

尝试在请求实际返回到 GeneralInit 方法中后调用摘要循环,您应该可以获得可用的数据。

而且您可能应该更改 Get 方法以返回 promise :

function UserSrv($http) {
var User = {};

var service = {
getUser: Get
};

return service;

function Get() {
return $http.get('/user.json')
.success(function(data, status, headers, config) {
User = data;
console.log(User);
return User;
})
.error(function(data, status, headers, config) {

})
}
}

关于javascript - AngularJS - JSON 返回后如何更新 $scope 上的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31385232/

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