2017-04-06 11 views
1

約束からオブジェクトの配列を取得しようとしています。私には2つの問題があります。まず、GetAccounts()AccountServiceで呼び出されると、2つのオブジェクトが返されます。解決策では、変数の結果をチェックすると、2つのオブジェクトがありません。第二に、コントローラがインスタンス化されると、このエラーが表示されます。アカウントが定義されていません。誰かが私が間違っていることを教えてもらえますか?前もって感謝します。

AccountService.js

app.factory('AccountService', ['$http', function ($http) { 
    return { 
     GetAccounts: function() { 
      return $http.get('api/Account/GetAccounts') 
      .then(function success(response) { 
       return response.data; 
      }, function error(response) { 
       return console.log("Oops!"); 
      }); 
     } 
    }; 
}]); 

AdminController.js

app.component('admin', { 
    templateUrl: 'Content/app/components/admin/Admin.html', 
    bindings: { 
     accounts: '<' 
    }, 
    controller: function() { 
     this.accounts = accounts; 
    } 
}) 

RO ute.js

app.config(['$routeProvider', function ($routeProvider) { 
    $routeProvider.when('/admin', { 
     template: '<admin accounts="$resolve.GetAccounts"></admin>', 
     resolve: { 
      GetAccounts: ['AccountService', function (AccountService) { 
       var result = AccountService.GetAccounts(); 

       return result; 
      }] 
     } 
    }) 
}]); 
+0

あなたが実際にAPIを作成していますか? – floor

+0

[ngRouteでコンポーネントコントローラにサービスを解決する問題の重複](http://stackoverflow.com/questions/43242296/issue-with-ngroute-injecting-resolve-services-into-component-controller) – georgeawg

+0

'GetAccounts'関数は、拒否された約束を成功した約束に変換する**ことに注意してください。 [$ qでの角度実行命令](http://stackoverflow.com/questions/34324153/angular-execution-order-with-q/34326388#34326388)を参照してください - georgeawg – georgeawg

答えて

1

は、それが動作を取得するには、以下の変更を行います。

AdminController.js

app.component('admin', { 
    templateUrl: 'Content/app/components/admin/Admin.html', 
    bindings: { 
     accounts: '<' 
    } }) 

route.js

app.config(['$routeProvider', function ($routeProvider) { 
    $routeProvider.when('/admin', { 
     template: 'template.html', 
     resolve: { 
      GetAccounts: ['AccountService', function (AccountService) { 
       var result = AccountService.GetAccounts(); 

       return result; 
      }] 
     }, 
     controller:['$scope','GetAccounts',function($scope, GetAccounts){ 
      $scope.accounts = GetAccounts; 
     }] 
    }) 
}]); 

template.html

<div> 
<admin accounts="accounts"></admin> 
</div> 
+1

ありがとう、これは動作します! –

関連する問題