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建設我的屬性之前沒有等待數據。我究竟做錯了什麼 ?
有什麼'TestFactory'?它是一個「異步」請求?如果是這樣,這是你的問題。 –
我添加了工廠代碼。是的,它會發出異步請求 –
由於您正在製作組件(而不是指令),因此我還習慣使用控制器的'$ onInit'生命週期掛鉤。在控制器上調用構造函數時,尚未使用其他範圍方面進行初始化。 – jusopi