角度1.5分量等待数据

时间:2016-11-07 16:26:34

标签: angularjs

我正在尝试使用au组件来显示我的数据。

在我的模板中,我有:

{{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))
}

但是在chrome控制台中,它告诉我$ scope。$ ctrl.data是未定义的,错误&#34; TypeError:无法读取属性&#39; nbElements&#39;未定义的

如果我这样做的话     的console.log($ $范围CTRL);

我在Chrome控制台中有这个:

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

Chrome告诉我myCotroller已经过评估,所以我认为myCotroller在构建我的属性之前没有等待数据。我做错了什么?

1 个答案:

答案 0 :(得分:4)

问题解决了在我的模板中添加ng-if条件

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

感谢您的帮助