2016-11-07 77 views
1

我想使用au組件來顯示我的數據。角1.5組件等待數據

在我的模板,我有:

{{myDatas}} 
<my-cmp data="myDatas"></my-cmp> 

我顯示{{myDatas}},以確保有數據

這裏是我爲我的組件代碼:

(function() { 
'use strict'; 

angular 
    .module('myApp.test') 
    .controller('TestController', TestController) 
    .component('myCmp', { 
     templateUrl: 'myTemplate.html', 
     bindings: { 
      data: '=' 
     }, 
     controller: myController 
    }); 

    function TestController($scope, $stateParams, ResidencesFactory) { 
     $scope.myDatas = TestFactory.read({id: $id}); 
    } 


    function myController($scope) { 
     console.log($scope.$ctrl.data.nbElements); 
    } 

})(); 

這代碼不起作用。 但是,如果我用預期的JSON替換$ scope.myDatas,它就可以工作。

這裏是TestFactory中的代碼:)

(function() { 
'use strict'; 

angular 
    .module('core.test') 
    .factory('TestFactory', TestFactory); 

function TestFactory($resource) { 
    return $resource(
     '/api/test/:id', 
     { 
      id: '@id' 
     }, 
     { 
      query: { 
       method: 'GET', 
       isArray: true 
      }, 
      read: { 
       method: 'GET' 
      } 
     } 
    ); 
} 

})(;

所以我想我必須等待我的TestFactory的$資源的數據,但我怎麼能做到這一點?

感謝

編輯 這裏是我做的。我換成

$scope.myDatas = TestFactory.read({id: $id}); 

TestFactory.read({id: $id}).$promise.then(function(response){ 
    $scope.myDatas = response; 
}); 

而在我的組件控制器,我有$ OnInit的是這樣的:

this.$onInit = function() { 
    console.log($scope.$ctrl.data); 
    $scope.percent = parseFloat(($scope.$ctrl.data.nbElements/ $scope.$ctrl.data.nbAllElements * 100).toFixed(2)) 
} 

但在鉻控制檯,它告訴我,$範圍$ ctrl.data未定義,並且錯誤「TypeError:無法讀取屬性'nbElements'的undefined

如果我做 console.log($ scope。$ ctrl);

我有這樣的鉻控制檯:

>myController 
    >$onInit: function() 
    >data: m 
    >__proto__:Object 

鉻告訴我myCotroller評價,所以我覺得myCotroller建設我的屬性之前沒有等待數據。我究竟做錯了什麼 ?

+0

有什麼'TestFactory'?它是一個「異步」請求?如果是這樣,這是你的問題。 –

+0

我添加了工廠代碼。是的,它會發出異步請求 –

+0

由於您正在製作組件(而不是指令),因此我還習慣使用控制器的'$ onInit'生命週期掛鉤。在控制器上調用構造函數時,尚未使用其他範圍方面進行初始化。 – jusopi

回答

4

問題解決了我的模板添加到NG-if條件

<my-cmp ng-if="myDatas" data="myDatas"></my-cmp> 

感謝您的幫助