角1.5组件等待数据

问题描述:

我想使用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

问题解决了我的模板添加到NG-if条件

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

感谢您的帮助