javascript - 请问这里,我这样写哪里不对呢?这里的methods难道不能这样绑定函数?
PHPz
PHPz 2017-04-11 11:25:40
[JavaScript讨论组]

// 对应的vue var vueifKey = new Vue({ el:"#keyp-demo", data:{ loginType:'username' }, methods:{ changename:function(){ var n = 0; n += 1; var vm = this; if(n%2===0){ vm.loginType='email' }else{ vm.loginType='username' } } } })

我想点击button之后 loginType就能改变了,但是写完发现改变不了 又不知道错在哪 那位前辈帮忙看看?

PHPz
PHPz

学习是最好的投资!

全部回复(3)
巴扎黑

把n放到data里面去

data {
    n: 0
}
黄舟

题主的目的是实现一个登录框登录类型可更改的组件, 但是绑定函数的实现逻辑有错误:

changename: function () {
    var n = 0;  // 每次调用函数的时候重新初始化
     n += 1;    // 所以n执行到这一步总是1
    var vm = this;
    if(n%2===0){  // 因为n是1 所以n%2总是结果总是1不严格等于0, 恒为假, 执行else部分的代码
        vm.loginType='email'
    }else{
        vm.loginType='username'
    }
}

正确的姿势:

let vueIfKey = new Vue({
  el: "#keyp-demo",
  data: {
    loginType: 'username',
    n: 0    // 提取并初始化临时变量0
  },
  methods: {
    changeName: function () {  // 命名风格小驼峰~
      this.n += 1;  // 引用data里面的变量

      // var vm = this; // 没有必要再绑定变量
      if ( n % 2 === 0) {
        this.loginType = 'email';
      } else {
        this.loginType = 'username';
      }
      // 一个更简洁的写法:
      // this.loginType = (0 === n % 2) ? 'email' : 'username';
    }
  }
});

此外, 官网中给出了一个更加简洁的实践, 但是无法保存loginType, 新增类型不方便.1:

<p id="keyp-demo">
    <p>
        <template v-if="loginType">
            <label>Username</label>
            <input placeholder="Enter your username">
        </template>
        <template v-else>
            <label>Email</label>
            <input placeholder="Enter your email address">
        </template>
    </p>
    <!-- 每次点击, 登录类型置反 -->
    <button v-on:click="loginType = !loginType">Toggle login type</button>
</p>
let vueIfKey = new Vue({
      el: "#keyp-demo",
      data: {
        loginType: true  // TRUE代表username登录, FALSE代表email登录
      }
});

  1. https://cn.vuejs.org/v2/guide...单元素-组件的过渡 ↩
阿神

不要在changename中声明n = 0;不然每次都是0开始,不会变。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号