AngularJS组件绑定不传递对象

时间:2017-08-22 17:44:07

标签: angularjs angular-components

接收错误无法在PollListCtrl.runQuery中读取未定义的属性“类型”。 我不确定为什么会出现这种情况。我控制台记录了profile-polls.controller.js,其中创建了listConfig以确保这里有一个对象。回复是

{type: "all", filters: {pollsCreated: Array(3)}}

但是当我尝试将它传递给profile-polls.html中的poll-list组件时,它会出现未定义。以下是相关文件的要点。谁能告诉我为什么这不正确传递?

https://gist.github.com/RawleJuglal/fa668a60e88b6f7a95b456858cf20597

2 个答案:

答案 0 :(得分:1)

我认为你需要为你的组件定义观察者。在开始时listConfig未定义,只有在一些延迟(下一个摘要周期)之后才获得值。所以我们创建观察者并在if语句后取消它。

app.component('pollList', {
  bindings: {
    listConfig: '='
  },
  templateUrl: 'poll-list.html',
  controllerAs: 'vm',
  controller: PollListCtrl
});

function PollListCtrl($scope) {

    var vm = this;

    function run(){
      console.log(vm.listConfig);
    }


    var cancelWatch = $scope.$watch(function () {
        return vm.listConfig;
    },
    function (newVal, oldVal) {

        if (newVal !== undefined){
            run();
            cancelWatch();
        }
    });
}

Demo plunkr

答案 1 :(得分:0)

  • 你永远不应该在angularjs应用程序中使用$ scope。
  • 您可以使用ngOnInit()生命周期钩子来访问“bindings”值而不是构造函数。

    ngOnInit(){

    $ ctrl.listConfig = {type:'all'};

    $ ctrl.limit = 5;

    }