[Vue基础]vue的挂载点;vue的插值表达式;vue指令; v-for指令(列表渲染);v-model指令(双向数据绑定);vue事件修饰符;vue事件方法中的this;vue事件参数

发布于:2022-12-16 ⋅ 阅读:(436) ⋅ 点赞:(0)

目录

vue的基本使用

vue的挂载点

vue的插值表达式

vue指令

v-text

v-html

v-on(绑定事件)

 v-bind指令

vue样式绑定

v-for指令(列表渲染)

v-model指令(双向数据绑定)

vue事件修饰符

vue事件方法中的this

vue事件参数


vue的基本使用

导入vue

1.官方下载后script导入

<script src="./vue.js"></script>

2.网络导入

<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>

注意:cdn是一种加速策略,能够快速的提供js文件

初始化vue:

 // 初始化Vue   
    // Vue是导入vue.js的构造函数
    // app是调用构造函数的生成的实例化对象
    const app = new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue!',
      }
    })

vue的挂载点

 1.el:挂载点.告诉Vue要把数据渲染到那个盒子上

(1)挂载点可以是:id选择器、类选择器、标签选择器

(2)如果选择器可以选中多个元素,vue只会渲染第一个

(3)如果希望vue可以渲染多个元素,就可以把多个元素包在一个父盒子中

(4)vue挂载点不可以是body与html标签,否则程序会报错

<body>
  <!-- 2.HTML结构 -->
  <div id="hm">
    {{message}}
    <span>{{message}}</span>
  </div>

  <script>
    /* 3.初始化配置 */
    let app = new Vue({
      // 1.el:挂载点.告诉Vue要把数据渲染到那个盒子上
      /*
      (1)挂载点可以是:id选择器、类选择器、标签选择器
    (2)如果选择器可以选中多个元素,vue只会渲染第一个
(3)如果希望vue可以渲染多个元素,就可以把多个元素包在一个父盒子中
(4)vue挂载点不可以是body与html标签,否则程序会报错

      */
      el: '#hm',
      // 2.data:数据驱动.Vue会自动把data数据渲染到el,无需dom操作
      data: {
        message: 'hello Vue!!!!'
      }
    })
  </script>
</body>

vue的插值表达式

 2.data:数据驱动.Vue自动把data树渲染到el

      (1).插值语法:{{数据}}

      (2)支持二元,三元运算

      (3)支持数组与对象取值语法

<body>
  <!-- 2.HTML结构 -->
  <div id="app-2">
    <p>姓名:{{name}}</p>
    <p>年龄:{{age+1}}</p>
    <p>我是{{age+1>300 ?'老祖宗':'小子'}}</p>
    <p>我的学生:{{stu.name}}</p>
    <p>我的学生年龄:{{stu.age}}</p>
  </div>
  <script>
    /* 3.初始化配置 */
    const app2 = new Vue({
      // 1.挂载点
      el: '#app-2',
      // 2.data:数据驱动.Vue自动把data树渲染到el
      /*
      (1).插值语法:{{数据}}
      (2)支持二元,三元运算
      (3)支持数组与对象取值语法
      */
      data: {
        name: '开了那',
        age: 324,
        stu: {
          name: '王爱仕达',
          age: 99
        }
      }
    })
  
    })
  </script>
</body>

vue指令

指令 (Directives) 是带有 v- 前缀的特殊 attribute。

v-text

    a.作用: 设置元素的文本 innerText

    b.与插值表达式区别

        v-text 设置元素的文本,如果元素有文本,则会覆盖现有的文本

        {{ }}  只会替换当前位置文本

<body>
  <div id="app">
    <p v-text="message"></p>
    <p>我喜欢{{message}}</p>
  </div>
  <script>
    /* 创建vue实例 */
    let app = new Vue({
      el: '#app',
      data: {
        message: '阿萨大大'
      }
    })

  </script>
</body>

v-html

1.v-html指令作用:设置元素的innerHTML

  2.v-html指令语法:v-html="值"

  3..v-html与v-text区别

  v-html:可以解析标签

  v-text:不可以解析标签

<body>
  <!-- HTML结构 -->
  <div id="app" v-html="message"></div>
  <!-- 1.v-html指令作用:设置元素的innerHTML
  2.v-html指令语法:v-html="值"
  3..v-html与v-text区别
  v-html:可以解析标签
  v-text:不可以解析标签 -->
  <script>
    /* 创建vue实例 */
    let app = new Vue({
      el: '#app',
      data: {
        message: '<h1>阿萨大大</h1>'
      }
    })

  </script>
</body>

h1标签生效

v-on(绑定事件)

        a.作用: 给元素绑定事件

        b.语法:

            标准语法:     v-on:事件名 = "方法名"

            简洁语法:     @事件名 = "方法名"

        c.注意点

            事件名就是原生事件名去掉on

            事件方法定义在vue实例的methods对象中

<body>
  <!-- HTML结构 -->
  <div id="app">
    <button v-on:click="doclick">点我</button>
    <div class="box" v-on:mouseenter="doenter" v-on:mouseleave="doleave"></div>
    <hr />
    <div class="box" @click="doclick" @mouseleave="doleave" @mouseenter="doenter"></div>
  </div>
  <script>
    /* 创建vue实例 */
    let app = new Vue({
      //el:挂载点
      el: "#app",
      //data: 要渲染的数据
      data: {},
      //methods:注册事件的方法名
      methods: {
        doclick() {
          alert('点击')
        },
        doenter() {
          console.log('移入');
        },
        doleave() {
          console.log('移出');
        },
      }
    })
  </script>


</body>

 v-bind指令

  1.v-bind作用:让原生属性也可以使用vue的数据

  (1)默认情况下,只有vue的语法才可以使用data中的数据。

  (2)如果希望‘原生属性’也可以使用data中的数据,就可以使用v-bind指令

  2.v-bind语法

  (1)标准语法:

  v-bind:原生属性名=“值"

  (2)简写语法:

  :原生属性名=“值”

  3.v-bind注意点:

  (1)标签属性如果没有使用v-bind,则它的值是一个字符串

(2)标签属性使用v-bind,则它的值是一个变量()

<body>
  <!-- HTML结构 -->
  <div id="app">
    <img src="./images/logo.png" alt="" title='logo' />
    <br>
    <p>标准写法</p>
    <img v-bind:src="imageUrl" alt="" v-bind:title="text" />
    <p>简洁写法</p>
    <img :src="imageUrl" alt="" :title="text" />
  </div>
  <script>
    /* 创建vue实例 */
    let app = new Vue({
      //el:挂载点
      el: "#app",
      //data: 要渲染的数据
      data: {
        imageUrl: './images/logo.png',
        text: '爱仕达多撒多',

      }
    })
  </script>
</body>

vue样式绑定

    1.v-bind样式绑定:使用v-bind设置class和style属性

    2.样式绑定语法:

    类名绑定语法

    :class="{类名:布尔值,类名:布尔值}”

    style绑定语法

    :style="{样式名:样式值,样式名:样式值}”

  3.注意点:如果类名有-,则需要给类名添加引号

<body>
  <!-- HTML结构 -->
  <div id="app">
    <button @click="flag=!flag">切换样式</button>
    <div :class="{greenBorder:flag,'red-box':flag}"></div>
    <hr />
    <div :class="{ 'blue-box': flag}"></div>
    <div :style="{'background-image':bgc}"></div>
  </div>
  <script>
    /* 创建vue实例 */
    let app = new Vue({
      //el:挂载点
      el: "#app",
      //data: 要渲染的数据
      data: {
        flag: true,
        bgc: 'linear-gradient(to right, pink, purple)',
      },
      methods: {}
    })
  </script>
</body>

v-for指令(列表渲染)

            (1)作用:遍历数组,并重复生成对应长度的相同标签

            (2)语法: v-for="item in 数组名"

                遍历下标:   v-for="(item, index) in items"

            (3)细节: 这个指令写在哪一个元素身上,就重复生成哪一个元素

<body>
  <!-- HTML结构 -->
  <div id="app">
    <ul v-for="(stu) in list">
    <li v-for="(val,key,i)  in stu">
      {{i+1}}--{{key}}--{{val}}
    </li>
  </ul>
  </div>
  <script>
    /* 创建vue实例 */
    let app = new Vue({
      //el:挂载点
      el: "#app",
      //data: 要渲染的数据
      data: {
        list: [
          { name: '李白', age: 92 ,country:'唐'},
          { name: '王伟', age: 42 ,country:'宋'},
          { name: '张角', age: 32 ,country:'汉'},
        ]
      },
      methods: {}
    })
  </script>
</body>

列表渲染 

v-model指令(双向数据绑定)

            (1)作用 : 双向数据绑定 与表单元素value值进行双向绑定

                a. 表单元素的值进行了修改,这个变量的值也会跟着修改

                b. 这个变量的值进行了修改,表单元素的值也会跟着修改

            (2)语法:  v-model="变量名"

            (3)注意点:

                a.   v-model只能用于表单元素

                b.   变量名要定义在data对象中

<body>

    <!-- HTML结构 -->
    <div id="app">
        <input type="text" v-model="msg" placeholder="请输入姓名">
        <p>我的名字是:{{msg}}</p>
        <button>点我修改model</button>
    </div>
    <script>
        /* 创建vue实例 */
        let app = new Vue({
            //el:挂载点
            el: '#app',
            //data: 要渲染的数据
            data: {
                msg:'',
            },
            methods: {

            },
        })
    </script>
</body>

v-model

 

vue事件修饰符

1.事件修饰符作用:对事件进行修饰作用(阻止冒泡、阻止默认跳转)

  2.语法:@事件类型.事件修饰符=“事件处理函数”

  3.常用修饰符总结

  (1)阻止表单默认跳转:

  @click.prevent="方法名"

  (2)键盘enter事件:

  @keydown.prevent="方法名"

  (2)阻止冒泡:

  @keydown.stop="方法名"

<body>
  <!-- HTML结构 -->
  <div id="app">
    <!-- (1)事件冒泡:触发子元素的事件,父元素‘同名事件’会被依次触发 -->
    <div class="father" @click="dofa">
      我是father
      <div class="son" @click.stop="doson">我是son</div>
    </div>
    <!-- (2)默认跳转:a标签和form表单里面的按钮 -->
    <form action="http://www.itheima.com">
      <input type="text" placeholder="用户名">
      <button @click.prevent="dologin">点我啊</button>
    </form>
    <!-- (3)输入框键盘事件:默认任何键都会触发 -->

    <input type="text" @keydown.enter="dokeydown" placeholder="键盘事件">
  </div>
  <script>
    /* 创建vue实例 */
    const app = new Vue({
      el: "#app",
      data: {},
      methods: {
        doson() {
          console.log('儿')
        },
        dofa() {
          console.log('父')
        },
        dologin() {
          console.log('登录')
        },
        dokeydown() {
          console.log('键盘事件')
        }
      }
    })
  </script>
</body>

vue事件方法中的this

          //   (1) dom事件中:事件处理函数中的this指向事件源

          //   (2)vue事件方法中:this指向vue实例

          //  (3)vue会把data与methods中的成员 平铺到vue实例中

          //   在vue方法中访问data数据:this.属性名

          // 在模板中访问data数据:省略this,直接写属性名

          // ***data中的数据是响应式渲染:data数据如果变化了,页面会自动更新


<body>
  <!-- HTML结构 -->
  <div id="app">
    <button @click="doclick">点我啊</button>
    <button @click="age++,name=name+'是的'">点我 啊啊啊啊</button>
    <br />
    <p>我的姓名:{{name}}</p>
    <p>我的年龄:{{age}}</p>
  </div>
  <script>
    /* 创建vue实例 */
    let app = new Vue({
      //el:挂载点
      el: "#app",
      //data: 要渲染的数据
      data: {
        age: 324,
        name: '王五'
      },
      methods: {
        doclick() {
          console.log(this === app)//true
          console.log(this.__proto__.constructor)
          console.log(this.__proto__ === Vue.prototype)//true
          console.log(this.name)
          this.age++
        }
      }
    })
  </script>
</body>

vue事件参数

        // (1)默认情况下每一个事件都有一个默认参数

        // (2)事件传参:@click="方法名(实参)"

        // (3)如果希望事件传参 + 事件对象同时获取,就可以用$event

        // @click="方法名(实参,$event)”

<body>
  <!-- HTML结构 -->
  <div id="app">
    <div class="box">{{stu.Party}}</div>
    <br />
    <span>{{stu.name}}</span>
    <button @click="doDelete($event,stu.id)">删除</button>
    <button>编辑</button>
  </div>
  <script>
    /* 创建vue实例 */
    let app = new Vue({
      //el:挂载点
      el: "#app",
      //data: 要渲染的数据
      data: {
        stu: {
          name: '李吉姆',
          id: '57687989',
          Party: 'republic'
        }
      },
      methods: {
        doDelete(e, id) {
          console.log(e.target,id)
        }
      }
    })
  </script>
</body>

本文含有隐藏内容,请 开通VIP 后查看