angularjs - 使用带有 $http promise 的工厂返回空对象

标签 angularjs http asynchronous factory

我有这个简单的工厂,它获取数据文件并将其保存到 service.data:

angular.module("tiki").factory("editTiki", ["$http", function($http){

    var service = {}
    service.data = {}

    service.getTikis = function(){

        $http.get("data/tikis.json").success(function(tikis){

            console.log(tikis)
            service.data = tikis

        })

    }

    return service



}])

然后,在 Controller 中我将它分配给 $scope。当然,这首先是空的,但是当 $http 解析时,它应该更新我的工厂,然后用返回的数据更新 service.data 对象。

angular.module('tiki').controller("tiki.controller.settings.edit", ["$scope", "editTiki", function($scope, editTiki){


    //should return the tikis
    $scope.preview = editTiki.data

    editTiki.getTikis()


    $scope.showEditTikiObject = function(){

        console.log($scope.preview)

    }

}])

但是,我有这个函数来测试数据的内容,它返回一个空对象。这是为什么?

最佳答案

在将 service.data = tikis 分配给 $scope.preview 之后,您正在重新分配它。

您可能应该根据 promise 做一些事情。

angular.module("tiki").factory("editTiki", ["$http", function($http){
    var service = {};
    service.data = {};

    service.getTikis = function(){
        return $http.get("data/tikis.json").success(function(tikis){
            console.log(tikis)
            service.data = tikis;

            return service.data;
        })
    };

    return service;
}]);

angular.module('tiki').controller("tiki.controller.settings.edit", ["$scope", "editTiki", function($scope, editTiki){
    editTiki.getTikis()
    .then(function () {
        $scope.preview = editTiki.data;
    });

    $scope.showEditTikiObject = function(){
        console.log($scope.preview);
    };
}])

关于angularjs - 使用带有 $http promise 的工厂返回空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29108586/

相关文章:

multithreading - 使用 Qt 增强 asio

javascript - 无法使用 RxJS 中的计时器完成比赛

javascript - AngularJS ngRepeat orderBy 不使用 DateTime 字符串

html - Angular 在刷新时加载 HTML 索引而不是 ng-app.js

javascript - Angular session 超时和管理

javascript - $http超时是什么意思?

使用 HTTP header 上传 PHP 文件

css - 如何使用angular js对容器中的复选框进行分组

html - 动态 img(或视频)标签根本不加载资源,HTTP 请求是 "pending"

javascript - 是否可以在 Js 中使用 await 而不使用 async