美文网首页
Vue.prototype的使用

Vue.prototype的使用

作者: 光明程辉 | 来源:发表于2019-11-11 17:13 被阅读0次

    经常看别人的项目都有 this.$xxx ,此时会有疑问?这东西是干嘛的?怎么用?
    :它是就是解决 替换全局使用的一个标识。
    官网其实也说了很明白。
    例如:
    来自真实项目。在main.js 或app.vue里声明一个自定义组件日期选择。

    import datePicker from './components/datePicker'
    // 这里就是全局替换 datePicker的标识
    Vue.prototype.$datepicker = datePicker;
    

    使用:
    this.$xxx , 可以赋值,替换某个属性

    this.$datePicker
    
    例如,调用自定义的日期选择器:
              // 日期选择
                showDatePicker(num) {
                    let init = JSON.parse(JSON.stringify(this.minTime));//保留页面数据,否则选择时页面的时候会跟随选项一起变动,但是取消之后不会还原
                    // 这里就是 datepicker
                    this.$datepicker({
                        type: 3,
                        value: init,
                        min: this.time,
                        max: this.maxTime,
                        change: (e) => {
                        }
                    }).then((e) => {
                        // this.time = e;
                        let t = e;
                        t.splice(1, 0, '年');
                        t.splice(3, 0, '月');
                        t.splice(5, 0, '日');
                        t = t.join('');
                        var y = e[0],
                            m = e[2] > 9 ? e[2] : '0' + e[2],
                            d = e[4] > 9 ? e[4] : '0' + e[4];
                        var date = y + '-' + m + '-' + d;
                        if (num == 1) {
                            this.startTime = date;
                            this.showStartTime = t;
                            this.getSelectedDate(this.startTime);
                        } else {
                            this.endTime = date;
                            this.showEndTime = t;
                        }
                        this.renderResultBox();
                    }).catch(() => {
    
                    })
                },
    

    摘官网一段解释:

    “为什么 appName 要以 $ 开头?这很重要吗?它会怎样?”

    这里没有什么魔法。$ 是在 Vue 所有实例中都可用的属性的一个简单约定。这样做会避免和已被定义的数据、方法、计算属性产生冲突。

    “你指的冲突是什么意思?”

    另一个好问题!如果你写成:

    Vue.prototype.appName = 'My App'
    

    那么你希望下面的代码输出什么呢?

    new Vue({
      data: {
        // 啊哦,`appName` *也*是一个我们定义的实例属性名!😯
        appName: 'The name of some other app'
      },
      beforeCreate: function () {
        console.log(this.appName)
      },
      created: function () {
        console.log(this.appName)
      }
    })
    

    日志中会先出现 "My App",然后出现 "The name of some other app",因为 this.appName 在实例被创建之后被 data 覆写了。我们通过 $ 为实例属性设置作用域来避免这种事情发生。你还可以根据你的喜好使用自己的约定,诸如 $_appNameΩappName,来避免和插件或未来的插件相冲突。

    当然有的同学不是了解vue 有这种使用的情况下,那么建议使用 require/import 来替换就好了(大型项目使用它就比较好维护)。

    相关文章

      网友评论

          本文标题:Vue.prototype的使用

          本文链接:https://www.haomeiwen.com/subject/kigtictx.html