IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue.js知识——v-model、组件 -> 正文阅读

[JavaScript知识库]Vue.js知识——v-model、组件

v-model

v-model可以用来实现表单元素和数据的双向绑定

<body>
    <div id="app">
      {{message}}
      <input type="text" v-model="message">
    </div>
    <script>
      const app = new Vue({
        el:"#app",
        data:{
          message:"用户帐号"
        }
      })
    </script>
</body>

在这里插入图片描述
在这里插入图片描述

v-model与radio结合使用

<body>
    <div id="app">
      <input type="radio" value="" v-model="gander"><input type="radio" value="" v-model="gander"><h2>你选择的性别是:{{gander}}</h2>
    </div>
    <script>
      const app = new Vue({
        el:"#app",
        data:{
          message:"用户帐号",
          gander:"男"
        }
      })
    </script>
</body>

在这里插入图片描述

v-model与checkbox结合使用

与chckbox单选框结合,同意协议,不同意就不允许进行下一步

<body>
    <div id="app">
      <label for="agree">
      <input type="checkbox" id="agree" v-model="isAgree">同意协议
      </label>
      <h2>{{isAgree}}</h2>
      <button :disabled="!isAgree">下一步</button>
    </div>
    <script>
      const app = new Vue({
        el:"#app",
        data:{
          message:"用户帐号",
          gander:"男",
          isAgree:"false"
        }
      })
    </script>
</body>

与多选框结合:

<body>
    <div id="app">
      <input type="checkbox" value="篮球" v-model="hobbies">篮球
      <input type="checkbox" value="足球" v-model="hobbies">足球
      <input type="checkbox" value="乒乓球" v-model="hobbies">乒乓球
      <input type="checkbox" value="排球" v-model="hobbies">排球
      <h2>您的选择:{{hobbies}}</h2>
    </div>
    <script>
      const app = new Vue({
        el:"#app",
        data:{
          isAgree:"false",
          hobbies:[]
        }
      })
    </script>
</body>

在这里插入图片描述

v-model与select结合使用

单选:只能选中一个值。
v-model绑定的是一个值,当选择option中的一个时,会将它对应的value赋值到data属性中

<body>
    <div id="app">
      <select name="" id="" v-model="fruit">
        <option value="苹果">苹果</option>
        <option value="西瓜">西瓜</option>
        <option value="芒果">芒果</option>
        <option value="葡萄">葡萄</option>
        <option value="奶茶">奶茶</option>
      </select>
      <h2>您的选择:{{fruit}}</h2>
    </div>
    <script>
      const app = new Vue({
        el:"#app",
        data:{
          isAgree:"false",
          hobbies:[],
          fruit:"奶茶"
        }
      })
    </script>
</body>

在这里插入图片描述

多选:可以选择多个值
v-model绑定的是一个值,当选择option中的一个时,会将它对应的value赋值到data中的数组属性中

<body>
    <div id="app">
      <select name="" id="" v-model="fruits" multiple>
        <option value="苹果">苹果</option>
        <option value="西瓜">西瓜</option>
        <option value="芒果">芒果</option>
        <option value="葡萄">葡萄</option>
        <option value="奶茶">奶茶</option>
      </select>
      <h2>您的选择:{{fruits}}</h2>
    </div>
    <script>
      const app = new Vue({
        el:"#app",
        data:{
          fruits:[]
        }
      })
    </script>
</body>

在这里插入图片描述

v-model的修饰符

lazy:在输入回车或者失去焦点时,才会更新变量

在这里插入图片描述
失去焦点或者按下回车时:
在这里插入图片描述

numer:使得输入框的内容转化为数字

未进行修饰符修饰时:

<input type="number" name="" id="" v-model="message">

在这里插入图片描述
<input type="number" name="" id="" v-model.number="message">

在这里插入图片描述
trim:去掉输入框内前后的空格
在这里插入图片描述
在这里插入图片描述

组件

可以将完整的页面分成很多个组件,每个组件都用于实现页面的一个功能块,而每一个组件又可以进行细分

注册组件的基本步骤

  1. 创建组件构造器
  2. 注册组件
  3. 使用组件

组件化的基本使用过程

<body>
    <div id="app">
      <my-cpn></my-cpn>
    </div>
  <script>
    //1、创建组件构造器对象
    const cpnC = Vue.extend({
      template:
     `<div>
        <h2>我是标题</h2>
        <p>我是内容,哈哈哈哈哈哈</p>
        <p>我是内容,嘿嘿嘿嘿嘿嘿</p>
      </div>`
  });

    //2、注册组件
    Vue.component('my-cpn',cpnC);
    const app = new Vue({
      el:"#app"
      });
  </script>
</body>

1、Vue.extend()

调用Vue.extend()创建的是一个组件构造器。
通常在创建组件构造器时,传入template代表自定义组件的模板
该模板就是在使用到组件的地方,要显示的HTML代码
实际上,这种写法在Vue2.x的文档中几乎已经看不到了,它会直接使用语法糖。

2、Vue.component():
调用Vue.component()是将上一步的组件构造器作为一个组件,并且给它起一个组件的标签名称
使用需要传递两个参数,1、注册组件的标签名。2、组件构造器

3、组件必须挂载在某个Vue实例中,否则不会生效

全局组件和局部组件

全局组件

上述的创建组件方式就是创建的全局组件,是其他的Vue实例下,也是可以使用到的

<body>
    <div id="app">
      <my-cpn></my-cpn>
    </div>
    <div id="app2">
      <my-cpn></my-cpn>
    </div>
  <script>
    //1、创建组件构造器对象
    const cpnC = Vue.extend({
      template:
     `<div>
        <h2>我是标题</h2>
        <p>我是内容,哈哈哈哈哈哈</p>
        <p>我是内容,嘿嘿嘿嘿嘿嘿</p>
      </div>`
  });

    //2、注册组件
    Vue.component('my-cpn',cpnC);
    const app = new Vue({
      el:"#app",
    })
    const app2 = new Vue({
      el:"#app2",
    })
  </script>
</body>

在这里插入图片描述

局部组件

需要先创建构造器,之后在实例中创建对象components,标签名:构造器对象

<body>
    <div id="app">
      <mycpn></mycpn>
    </div>
    <div id="app2">
      <mycpn></mycpn>
    </div>
  <script>
    const cpnC = Vue.extend({
      template:
     `<div>
        <h2>我是标题</h2>
        <p>我是内容,哈哈哈哈哈哈</p>
        <p>我是内容,嘿嘿嘿嘿嘿嘿</p>
      </div>`
  });
    const app = new Vue({
      el:"#app",
      components:{
        mycpn:cpnC
      }
    })
    const app2 = new Vue({
      el:"#app2",
    })
  </script>
</body>

在这里插入图片描述

父组件和子组件

创建两个构造器

    const cpnC1 = Vue.extend({
      template:
        `<div>
        <h2>我是标题1</h2>
        <p>我是内容1</p>
        <p>我是内容1</p>
      </div>`
    });
    const cpnC2 = Vue.extend({
      template:
        `<div>
        <h2>我是标题2</h2>
        <p>我是内容2/p>
        <p>我是内容2</p>
      </div>`
    });

在extend中也有一个component属性,如果将cpnC1在cpnC2中注册

    const cpnC1 = Vue.extend({
      template:
        `<div>
        <h2>我是标题1</h2>
        <p>我是内容1</p>
        <p>我是内容1</p>
      </div>`
    });
    const cpnC2 = Vue.extend({
      template:
        `<div>
        <h2>我是标题2</h2>
        <p>我是内容2</p>
        <p>我是内容2</p>
        <mycpn1></mycpn1>
      </div>`,
      components:{
      	mycpn1:cpnC1,
      }
    });

之后在Vue实例中注册cpnC2:

    const app = new Vue({
      el: "#app",
      components: {
        mycpn2: cpnC2
      }
    })

在html中输入以下代码:

 <div id="app">
   <mycpn2></mycpn2>
 </div>

在这里插入图片描述

此时,cpnC2就是父组件,cpnC1就是子组件,在使用父组件的时候,子组件也会显示出来,但是如果直接使用子组件,就会报错。
为何报错?

因为在Vue实例中使用模板,会现在Vue的components中寻找构造器,如果没有就去全局中找,而不会深入到component的对象中去寻找。在全局中找不到就报错了。

组件的语法糖

创建全局组件:

Vue.component("cpn1",{
      template:
        `<div>
          <h2>我是标题1</h2>
          <p>我是内容1</p>
          <p>我是内容1</p>
        </div>`
        })

创建局部组件:

    const app = new Vue({
      el: "#app",
      components: {
        mycpn2: {
         template:
	        `<div>
	          <h2>我是标题2</h2>
	          <p>我是内容2</p>
	          <p>我是内容2</p>
	        </div>`,
	        }
      }
    })

模板组件抽离的写法

需要用到template标签写法
在body标签中写入:

  <template id="cpn1">
    <div>
      <h2>我是标题2</h2>
      <p>我是内容2</p>
      <p>我是内容2</p>
    </div>
  </template>

在javascript中写:

    const cpnC2 = Vue.extend({
      template: "#cpn1"  
    });

(理解)为什么组件中的data必须是函数

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 21:57:59  更:2021-08-28 21:58:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:06:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码