联系QQ 284710375
首页 > 技术分享 > Vue
收藏

Vue入门必备知识,Vue入门体验案例2023-07-02 16:00:48

大潇博客 原创文章,转载请标明出处

Vue的两种使用方法:

1、可以通过脚手架搭建项目

2、可以使用传统方法,在html文件中引入vue.js,再搭建项目(此方法虽行的通,但几乎没人用)


vue使用mustache模板引擎


注意:

1、Vue脚手架版本并非Vue版本

2、Vue有官方脚手架vue-cli,还有其它民间脚手架,比如:webpack-simple


实例化vue对象后,vue下的data、methods等,都会被提取到vue实例中,提取的过程被称为注入

注入的目的:

1、完成数据响应式

2、绑定this


Vue源码使用比较高效的diff算法,渲染时采用虚拟DOM树方法

简而言之就是:vue为了提高渲染效率,把模板编译成为虚拟DOM树,然后再转化生成真实DOM。

虚拟DOM的好处是,当数据变动时,将重新编译生成新虚拟DOM树,然后使用diff算法前后两棵树对比,仅将差异部分反映到真实的DOM中,这样可以最小程度改动DOM,提升渲染效率


Vue提供多种方式生成虚拟DOM树(新手可理解为:Vue有多种渲染模板的方法):

1、在挂载内部直接写vue代码,也就是传统HTML+JS的写法(先做好模板,然后通过js代码赋值),此时将使用元素的outerHTML作为模板;

2、在实例化Vue对象中的template配置中写代码;

3、在实例化Vue对象中的render配置中,用函数直接创建虚拟节点,此时完全脱离模板,将省略编译步骤


上面三种的优先级顺序:render > template > outerHTML


注意:模板只能有一个根节点,虚拟节点树必须是单根的,diff算法决定了,只能由真实DOM和虚拟DOM两棵树对比


下面以outerHTML模板做为背景,结合代码,讲解一些指令的用法

指令会影响元素的渲染行为,指令始终以“v-”开头


v-for:循环元素,比如要循环<li>

<ul>

      <!-- v-for参数:item是数组循环的每一项,i是下标 -->

      <li v-for="(item, i) in data">{{data.param}}</li>

      <!-- 下标可以省略,简写为 -->

      <li v-for="item in data">{{item.param}}</li>

</ul>


v-if、v-else-if、v-else:控制元素生成

<div v-if="item.show==1">价格情况:</div>

<div v-if="item.price>10000">贵</div>

<div v-else-if="item.price>5000">中等</div>

<div v-else>便宜</div>

<div v-if="item.number<1">,没有库存</div>


v-show:控制元素可见度

<div v-show="true">显示</div>

<div v-show="false">隐藏</div>


//通过变量

data: {

      show_status: true

}

<div v-show="show_status">变量控制</div>


v-html:设置元素的innerHTML

带html标签的内容,如:<h1>标题</h1>,在Vue中使用mustache模板引擎的{{变量名}}进行渲染,html标签会被编码并直接输出到页面,使用v-html指令就可以将标签作为html的一部分显示出来

注意:该指令会导致元素的模板内容失效

//定义变量content的值

data: {

      content: '<p style="color:red">我是P标签</p>';

}

若通过两个大括号渲染:{{content}},p标签也会被当做字符串输入到页面

正确渲染方法

<div v-html="content"></div>


//若元素中有内容,使用v-html后将失效

<div v-html="content">div中原有的内容,使用v-html后将被替换成新内容</div>


v-bind:绑定属性

HTML标签自带的属性,如a标签的href属性、img的src属性,无法通过{{变量名}}进行渲染赋值,Vue提供了v-bind用于属性绑定,如 v-bind:href="变量名"、v-bind:src="变量名"

v-bind可以简称成冒号,如 :href="变量名"、:src="变量名"

//定义变量

data: {

      Url: 'https://www.baidu.com/',

      imgUrl: 'https://www.daxiao.show/uploadfile/2022/1122/20221122020048279.png'

}

//使用v-bind绑定属性,变量直接写,不需要{{}}

<a v-bind:href="Url">点击跳转</a>

//使用v-bind渲染图片

<img v-bind:src="imgUrl" width="500">


//以上可简写为

<a :href="Url">点击跳转</a>

<img :src="imgUrl" width="500">


v-on:注册事件

该指令由于十分常用,因此提供了简写@

事件参数会自动传递,调用函数时可不带参数,比如:@click="func_name" 和 @click="func_name($event)" 是一样的

事件支持一些指令修饰符,如:prevent、stop

prevent 阻止元素的默认行为,比如a标签的跳转行为,使用方法如:@click.prevent="fun_name"

stop 阻止冒泡

<button v-on:click="func($event)">点击事件</button>

<!-- 使用@简写,并省略参数 -->

<button @click="func">点击事件</button>


<!-- 阻止默认行为,此时点击span并不会触发外层的跳转 -->

<a href="https://www.baidu.com/">

      <span @click.prevent="func()"></span>

</a>


<!-- 阻止冒泡,此时点击func2并不会触发父级的func1 -->

<div @click="func1">

      <div @click.stop="func2">点击</div>

</div>












体验Vue,outerHTML模板

<!-- vue是渐进式的,并不要求整个网站全部使用vue,可以只在某个区域使用vue的功能 -->

<!--↓↓↓↓↓↓ vue控制的界面模板 ↓↓↓↓↓↓-->

<div id="app">

      <!-- vue使用mustache模板引擎 -->

      <h1>系统名称是:{{title}}</h1>

      <!-- 使用v-for循环遍历 -->

      <ul>

            <!--

                  v-for参数:

                  item 循环数组每一项

                  i 下标

            -->

            <li v-for="(item,i) in products">

                  商品名称:{{item.name}},

                  <button v-if="item.num>0" @click="minus(item)">-</button>

                  <span v-if="item.num>0">数量:{{item.num}}</span>

                  <span v-else>没库存</span>

                  <button v-if="item.num>0" @click="item.num++">+</button>

                  &nbsp;

                  <button @click="del(i)">删除此项</button>

            </li>

      </ul>

</div>

<!--↑↑↑↑↑↑ vue控制的界面模板 ↑↑↑↑↑↑-->


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

<script>

var products = [

      {name: '苹果', num: 10},

      {name: '香蕉', num: 15},

      {name: '橘子', num: 20}

]

var methods = {

      minus(product){

            product.num = product.num - 1 < 0 ? 0 : product.num - 1;

      },

      del(index){

            //this 表示 vm 实例

            this.products.splice(index,1);

      }

}

//vm:vue实例

var vm = new Vue({

      //配置

      el: "#app", //css选择器

      data: {

            //和界面相关的数据

            title: '库存管理系统',

            products: products

      },

      methods: methods

});

</script>


  1. 1

  2. 21212

  3. dfsdf

  4. fdsfsd



打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311