它是否适合使用Polymer 2中的手势事件监听器?

时间:2017-09-27 13:25:26

标签: javascript polymer-2.x

Polymer.Gestures.addListener(googleLoginBtn, 'tap', e => loginWithGoogle(e));
Polymer.Gestures.addListener(logOutBtn, 'tap', e => logOut(e));

此处googleLoginBtn和logOutBtn是允许您登录和注销的相应按钮的ID。我已经导入了使用手势事件监听器所需的所有必要代码。

我收到此错误,说我的addListener为null。我应该改变什么才能使它发挥作用。

1 个答案:

答案 0 :(得分:0)

检查您提供的代码here

解决方案(简单):

<paper-button raised on-tap="loginWithGoogle" id="googleLoginBtn">Login 
with Google</paper-button>

由于您使用带注释的事件侦听器来触发手势事件“tap”,您可以在类中定义函数/侦听器loginWithGoogle。当您使用带注释的事件侦听器时,Polymer会自动为手势事件执行额外的簿记。

示例:

loginWithGoogle(){
//.. Do login on tap
}

另一种解决方案是在扩展Polymer.Element的类中的构造函数或ready方法上定义手势事件。

class NotesApp extends Polymer.Element {
  static get is() { return 'notes-app'; }
  static get properties() {
    return {
      prop1: {
        type: String,
        value: 'notes-app'
      },
      currentUser: {
        type: String
      }
    };
  }

loginWithGoogle(e) {
  var provider = new firebase.auth.GoogleAuthProvider();

    auth.signInWithPopup(provider).then(function(result) {
      var token = result.credential.accessToken;
      console.log(token);
      var user = result.user;
      console.log(user);
      currentUser = user.displayName;
    }).catch(function (error) {
      console.log(error.message);
    });
}

 logOut (e) {
  firebase.auth().signOut().then(function() {
  alert("Signed Out!");
  }).catch(function(error) {
  console.log(error.message);
});
}

////Like this////
ready(){
  super.ready();
  Polymer.Gestures.addListener(this.$.googleLoginBtn, 'tap', e => 
  loginWithGoogle(e));
  Polymer.Gestures.addListener(this.$.logOutBtn, 'tap', e => logOut(e));
}

} 

在某些情况下,您可能需要扩展类,如:

class NotesApp extends Polymer.GestureEventListeners(Polymer.Element){...}