2

ファクトリを使用して JSON ファイルから応答を返す角度コントローラーがあります。返されたデータをトラバースしようとすると、コメントに次のエラーが表示されます。ただし、角かっこ内の HTML 内で realArticleData オブジェクトを使用すると、完全に横断します。工場から返された約束と関係があると思いますが、よくわかりません。

コントローラー スニペット:

function SpecialOrderItemsCtrl($scope, $location, articleDataService) {
    $scope.realArticleData = articleDataService.getArticles();
    //This throws TypeError: Cannot read property 'thdCustomer' of undefined
    $scope.custInfo = $scope.realArticleData.articles.thdCustomer;
}

HTML スニペット:

<div ng-controller=SpecialOrderItemsCtrl>
<label>Raw Article JSON</label>
<p>{{realArticleData}}</p>
<label>Json transversed by one level</label>
<p>{{realArticleData.articles}}</p>
<label>THD CUstomer </label>
<p>{{realArticleData.articles.thdCustomer}}</p>
</div>

工場:

function articleDataService($rootScope, $http) {
    articleDataService.data = {};
    articleDataService.getArticles = function() {
    $http.get('articleData.json')
        .success(function(data) {
            articleDataService.data.articles = data;
        });
        return articleDataService.data;
    };
    return articleDataService;
}
sendDesign.factory('articleDataService', articleDataService);
4

3 に答える 3

2

サービスを次のように変更します。

articleDataService.getArticles = function() {
    $http.get('articleData.json').then(function(result) {
        return result.data
    });
}

そしてあなたのコントローラーで:

articleDataService.getArticles().then(function(data) {
    $scope.realArticleData = data;
    $scope.custInfo = $scope.realArticleData.articles.thdCustomer;
});

promise パターンに従ってコントローラーに戻る必要があります。そうしないと、呼び出しが終了するのを待たずに、undefined

于 2013-11-05T20:17:40.987 に答える