Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
聚合物1.x+;Firebase 2.x:Firebase数据不会在登录后的第一次渲染中加载_Firebase_Polymer_Firebase Realtime Database_Firebase Polymer_Polymerfire - Fatal编程技术网

聚合物1.x+;Firebase 2.x:Firebase数据不会在登录后的第一次渲染中加载

聚合物1.x+;Firebase 2.x:Firebase数据不会在登录后的第一次渲染中加载,firebase,polymer,firebase-realtime-database,firebase-polymer,polymerfire,Firebase,Polymer,Firebase Realtime Database,Firebase Polymer,Polymerfire,在用户登录事件后页面的第一次加载上,我想用存储在我的Firebase中的一组对象填充项属性 A实现了我想要的行为 A. D ... 特性:{ 路径:{ 类型:字符串, 值:函数(){ 返回“widgets”; }, } }, ... 此外,在聚合物松弛网站上,@will在中国表示: 我在第一次加载数据时遇到了问题,我发现如果我没有对同一路径的多个引用,我就不会遇到这个问题 我不确定这在这里意味着什么,因为我的元素(和应用程序)中只有一个引用指向firebase query元素中的路径path

在用户登录事件后页面的第一次加载上,我想用存储在我的Firebase中的一组对象填充
属性

A实现了我想要的行为

A. D

...
特性:{
路径:{
类型:字符串,
值:函数(){
返回“widgets”;
},
}
},
...
此外,在聚合物松弛网站上,@will在中国表示:

我在第一次加载数据时遇到了问题,我发现如果我没有对同一路径的多个引用,我就不会遇到这个问题


我不确定这在这里意味着什么,因为我的元素(和应用程序)中只有一个引用指向
firebase query
元素中的路径
path=“widgets”

我不认为这是您的具体问题,但在登录->setNewRoute(下一页)之后可能类似我没有得到渲染,我将随后的模板(Iron Ajax)更改为手动触发,而不是通过观察者触发

  loggon: function parseLogin(user, password) {
...

     Parse.User.logIn(_user, _pass).then(function() {
      page('/channels');

---
channels.render ...

      _render: function() {
        console.log('_render');
        this.$.get_channlinq.headers = hdr;
        //xhr params
        var body = this._setQry(this.params.channelId);
        this.$.get_channlinq.body = JSON.stringify(body);
        //fetch , load , template will render
        this.$.get_channlinq.generateRequest(); 
“使用时,我希望看到items对象填充,但是 items对象为空。但是,如果我手动刷新浏览器 (不注销)元素的行为与预期的一样 注销(然后在注销时刷新),问题再次出现,直到我 重新加载。”

我在我的应用程序中看到了类似的行为。在我的例子中,它与firebase身份验证和firebase查询竞争条件有关。就我而言

  • 当我登录时,firebase身份验证在firebase查询的同时/之后触发。在这种情况下,我的查询被拒绝,因为权限无效-我在进行身份验证之前进行查询。 错误日志摘录:

    “详细信息:错误:权限\u在/parents被拒绝:客户端没有 访问所需数据的权限…,键入:“错误”,目标: firebase查询。。。。 验证完成后,firebase查询不会重试。我不知道这是否是错误

  • 当我登录后刷新时,由于我已经通过身份验证,因此查询成功

  • 若要调试此问题,我添加了一个on error handler以打印权限。若要解决此问题,我使用的是disabled属性。首次加载页面时,所有查询都被禁用。只有在身份验证成功时,我才会切换“disabled”,此时查询才会成功触发

    sign:function(){
    var email=this.user.email;
    var password=this.user.password;
    此.$.auth.signiWithEmailandPassword(电子邮件,密码)
    .然后(功能(响应){
    self.disabled=false;
    //console.log('登录',响应);
    })
    .catch(函数(错误){
    log('auth-element:signIn error is',error.detail);
    })
    .然后(函数(){
    //调用其他函数
    });
    },
    handleError:函数(错误){
    log('error message',error.detail.message);
    },

    我要迟到了,但我使用dom if condition if user解决了这个问题
    这可以防止在没有用户身份验证的情况下发出请求

    您是否排除了获取时与http/cache相关的本地主机问题?我不认为会是这样,但至少将确保您的浏览器已配置的标准问题放在一边,这样缓存就不会带来额外的麻烦。是否存在与http/cache相关的XHR代码获取?我这么说是因为我认为在模板代码中,您可以在[[items]]上手动触发/重新触发获取不要依赖绑定对象上的生命周期观察者文档?@RobertRowntree:删除我之前的评论。我还没有找到解决方案。我只是认为我找到了。不,没有与获取相关的XHR代码。你能在第二条评论中解释你的想法吗?我如何排除本地主机问题?我的意思是,我清除了cac但除此之外,我还有什么可以做的吗?问题仍然存在。你可以在以下位置转到“松弛”位置:
    <firebase-query
        id="query"
        ...
        path="widgets"
        data="{{items}}">
    </firebase-query>
    
    user: {
      type: Object,
      notify: true,
      observer: '_userChanged',
    },
    
    _userChanged: function() {
      this.$.query.path = 'widgets';
      var items = this.$.query.ref.child('widgets');
      this.set('items', items);
    },
    
    <firebase-query
        id="query"
        ...
        path="[[path]]"
        data="{{items}}">
    </firebase-query>
    
    <script>
    ...
      properties: {
        path: {
          type: String,
          value: function() {
            return 'widgets';
          },
        }
      },
    ...
    </script>
    
      loggon: function parseLogin(user, password) {
    ...
    
         Parse.User.logIn(_user, _pass).then(function() {
          page('/channels');
    
    ---
    channels.render ...
    
          _render: function() {
            console.log('_render');
            this.$.get_channlinq.headers = hdr;
            //xhr params
            var body = this._setQry(this.params.channelId);
            this.$.get_channlinq.body = JSON.stringify(body);
            //fetch , load , template will render
            this.$.get_channlinq.generateRequest();