由于项目比较老不是前后端分离就算啦,而且还是普通的HTML,扩展性极差,真是难顶.但是工作还是要做,既然做了那就记录一下吧

步骤一

先引入vue.js

<script src="https://unpkg.com/vue@2.6.10/dist/vue.min.js"></script>

步骤二

编写vue组件(js文件)

var myload = {
    template: `
  <div class="amount">
    <input v-model="qfwTxt" @blur="onblur" @focus="onfocus"/>
    <input v-model="bigTxt" readonly/>
  </div>
`,
    props: ['decimal_point'],//接收父组件传的值
    data() {
        return {
            qfwTxt: '',
            bigTxt: ''
        }
    },
    methods: {
        onblur() {
            // 其他处理
            // this.qfwTxt = thousandth(this.qfwTxt, this.decimal_point);
            this.bigTxt = `${this.qfwTxt}元`;
            //把值传给父组件
            this.$emit('childfun', this.qfwTxt)
            //借助v-model原理将值返回给父组件
            this.$emit('input', this.qfwTxt)
        },
        onfocus() {
            //具体操作
        }
    },
  created() {
    //初始化赋值
    if (this.$attrs.value) {
      this.qfwTxt = this.$attrs.value;
      this.bigTxt = `${this.$attrs.value}元`;
    }
  }

}

可以看到,其实就是定义了一个对象,template用来定义组件的dom,props、data和methods等这些就是组件的一些基本使用了具体的话就按照业务需求即可. created方法是组件的生命周期函数,因为我做的组件要在父子间互通,并且会有初始值,所以我就直接在创建的时候进行处理.

步骤三

把写好的组件引入到html文件

<!-- 引入js组件 -->
<script src="my_component.js}"></script>

这一步比较关键的地方在于,需要先引入vue,然后再引入组件

步骤四

在HTML页面进行vue实例的创建,并且把自定义组件给加载到vue实例里面去

<script type="text/javascript">

var vm = new Vue({
    el: '#webApp',
    components:{
        // 定义组件
        'my-load':myload,
    },
    data: {
        testTxt: 2,
        testTxt1: 12500,
    },
    created: function () {

    },
    methods: {
        childfun(val){
            // 使用函数拿到回调的数据
            console.log('val',val);
            this.childvalShow();
        },
        childvalShow(){
            console.log('v-model',this.testTxt1);
        },

    }

})
</script>

具体效果

左边框输入文字,右边边框自动加上元 image.png

总结

以上就是在HTML页面使用自定义组件,但是有一点不好的地方是,这样做组件的样式只能写在HTML文件而且样式会比较容易重叠

<!DOCTYPE html>
<html lang="en" >
<head>
    <meta charset="UTF-8">
    <title>HTML页面使用js的vue组件</title>
</head>

<body>
<div id="webApp">
    <!-- my-load 就是我自定义的组件 -->
    <my-load v-model="testTxt1" :decimal_point="testTxt"  @childfun="childfun"></my-load>
</div>
<script src="https://unpkg.com/vue@2.6.10/dist/vue.min.js"></script>
<!-- 引入js组件 -->
<script src="my_component.js}"></script>

<script type="text/javascript">

var vm = new Vue({
    el: '#webApp',
    components:{
        // 定义组件
        'my-load':myload,
    },
    data: {
        testTxt: 2,
        testTxt1: 12500,
    },
    created: function () {

    },
    methods: {
        childfun(val){
            // 使用函数拿到回调的数据
            console.log('val',val);
            this.childvalShow();
        },
        childvalShow(){
            console.log('v-model',this.testTxt1);
        },

    }

})
</script> 

</body>
</html>