Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 聚合和角度:尝试将数据从控制器传递到元素时失败_Javascript_Jquery_Angularjs_Data Binding_Polymer - Fatal编程技术网

Javascript 聚合和角度:尝试将数据从控制器传递到元素时失败

Javascript 聚合和角度:尝试将数据从控制器传递到元素时失败,javascript,jquery,angularjs,data-binding,polymer,Javascript,Jquery,Angularjs,Data Binding,Polymer,我的问题是下一个: 我有一个AngularJS应用程序,里面使用了定制的聚合物元素 例如,我有一个名为Main的控制器。它处理/main路由并使用自己的视图-main.html main.html中有my元素 我在控制器中初始化集合,并使用document.querySelector('my-element')将其传递给元素。集合=$scope.collection。当我直接打开/main URL并加载页面时,它会工作。但是,当我直接打开另一个路由,然后转到/main时,它不起作用,因为控制器在

我的问题是下一个:

  • 我有一个AngularJS应用程序,里面使用了定制的聚合物元素

  • 例如,我有一个名为Main的控制器。它处理/main路由并使用自己的视图-main.html

  • main.html中有my元素

  • 我在控制器中初始化集合,并使用document.querySelector('my-element')将其传递给元素。集合=$scope.collection。当我直接打开/main URL并加载页面时,它会工作。但是,当我直接打开另一个路由,然后转到/main时,它不起作用,因为控制器在我的元素工作的ready()和create()方法之后运行

  • 我的元素create()方法中的setInterval()解决方案不好。 请帮助初学者

    提前谢谢

    //我的控制器
    app.controller('MyController',函数($scope,collection){
    $scope.collection=collection;//从路由解析
    });
    //我的element ready()方法
    ...
    就绪(){
    //如果没有超时,它将抛出异常,因为JSON.parse会在路由状态更改时解析{{list}}字符串本身。
    setTimeout(函数(){
    this.list=JSON.parse(this.getAttribute('list'));
    }, 300);
    }

    您可以使用聚合物数据绑定,如下所示:

    <polymer-element name="my-element" attributes="listJson">
      <template>
        ....
      </template>
      <script>
        Polymer({
          created: function() {
            this.list = [];
          },
          ready: function() {
            this.initList();
          },
          listJsonChanged: function() {
            this.initList();
          },
          initList: function() {
            this.list = JSON.parse(this.listStr);
          }
        })
      </script>
    </polymer-element>
    
    
    ....
    聚合物({
    已创建:函数(){
    this.list=[];
    },
    就绪:函数(){
    this.initList();
    },
    listJsonChanged:function(){
    this.initList();
    },
    initList:function(){
    this.list=JSON.parse(this.listStr);
    }
    })
    
    然后在视图中:

    <my-element listJson="{{collection}}"></my-element>
    
    
    
    你能给我们看一些代码吗?不客气。它也不起作用-JSON.parse抛出错误,因为它解析{{collection}}字符串,而不是集合JSON本身。我找到了另一种解决方案:1)用于属性解析的domReady事件处理程序;2) $watching document.querySelector('my-element').initList用于在AngularJS控制器内分配列表数据。它在控制器加载开始时未定义。