Vue学习笔记【1】

1.MVC与MVVM区别

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。

视图(View):用户界面。
控制器(Controller):业务逻辑
模型(Model):数据操作(CRUD)

交互模式如下(图片摘自阮一峰日志):
在这里插入图片描述

用户可以向 View 发送指令(DOM 事件),再由 View 直接要求 Model 改变状态,然后更新View
用户也可以直接向 Controller 发送指令(改变 URL 触发 hashChange 事件),再由 Controller 发送给 View

MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。

视图(View):用户界面。
双向数据绑定(ViewModel):View绑定到ViewModel,然后执行一些命令在向它请求一个动作。而反过来,ViewModel跟Model通讯,告诉它更新来响应UI
模型(Model):数据操作
交互模式如下:
在这里插入图片描述

总结:mvc和mvvm其实区别并不大。都是一种设计思想。主要就是mvc中Controller演变成mvvm中的viewModel。mvvm主要解决了mvc中大量的DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。VM提供双向数据绑定当View和Model中的数据有一个发生改变,另一个也会随着改变

2.Vue基本代码结构

<!DOCTYPE html> 
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>Document</title>
      </head>
      <body>
        <!--将来new的Vue的实例会控制这个元素的所有内容-->
        <div id="app"></div>
        <script src="../../js/vue.js"></script> 
        <script>
          var vm = new Vue({
            el: "#app", //当前我们new的这个Vue实例要控制页面上的哪个区域
            data: {
              msg: "HelloWorld"   //data属性中,参访的是el中要用到的数据
            },
            methods: {
            },
          });
        </script>
      </body>
    </html>

3.Vue常用指令的使用

1.插值表达式 {{ }} ,将data中数据插入页面中,只会替换自身的占位符,不会清空元素原本的内容
2.v-cloak :(通过设置样式display:none)解决插值表达式闪烁问题
3.v-text :(v-text=‘data中的属性名’)会覆盖元素中原本的内容,无闪烁
4.v-html:(v-html=‘data中的属性名’)插入HTML标签,会覆盖元素中原本的内容
5.v-once: 不允许修改数据。带有v-once的p标签则只会显示msg的初始值,不会随着msg被修改而变化。
6.v-bind:(v-bind:title="data中的属性名 + ‘合法的js语法’ ")用于绑定属性,简写为 :
7.v-on:(v-on:click=‘show’)用于绑定事件,简写为 @
8.v-model:实现表单元素和应用状态之间的双向数据绑定
9.v-for:循环指令,基于一个数组或者对象渲染一个列表,需配合 key值 使用。
10.v-if:根据表达式的值的真假条件,销毁或者重建标签元素。flag 为true 渲染p标签,false 不渲染
11.v-show:根据表达式的值的真假条件,切换元素的 display CSS 属性。flag 为 false 将p 标签的 display属性设置为 none

<div id="app">
	<p v-once>{{ msg }}</p>
	<p v-cloak>{{msg}}显示出来了</p>
    <p v-text="msg"></p>
    <p v-html="htmlmsg"></p>
    <p v-once>{{msg}}</p>  //显示msg的初始值,不会随着msg被修改而变化。
    <a v-bind:href="url"></a>
    <a :href="url"></a>  //简写
    <button v-on:click="show">BOTTON</button>
    <button :click="show">BOTTON</button> //简写
    <input v-model="name"></input> //输入值的改变,会即时在下面显示
    <p>{{ name }}</p>
    <ul>
      	<li v-for="(item,index) in myarray"> {{ item }} </li>
  	</ul>
  	<p v-if="flag">123</p>  //flag 为true 渲染<p>标签,false 不渲染
  	<p v-show="flag">123</p> //flag 为 false 将<p> 标签的 display属性设置为 none
</div>
<script>
  var vm = new Vue({
    el: "#app", 
    data: {
      msg: "HelloWorld" ,
      htmlmsg:"<p>hello world</p>",
      name:"",
      url:"www.baidu.com",
      myarray:[1,2,3],
      flag:true
    },
    methods: {
    	show(){
    		console.log(123)
    	}
    },
  });
</script>

v-if 与v-show 使用总结:
v-if是通过控制dom节点的存在与否来控制元素的显隐;v-show是通过设置DOM元素的display样式,block为显示,none为隐藏;
v-if有更高的切换消耗;v-show有更高的初始渲染消耗;
如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。

4.事件修饰符(.stop/.prevent/.capture/.self/.once)

<a v-on:click.stop="doThis"></a> //阻止单击事件冒泡
<form v-on:submit.prevent="onSubmit"></form> //阻止默认事件,默认提交时重载页面,使用后不会重载页面
<a v-on:click.stop.prevent="doThat"></a> //修饰符可以串联使用,并且使用的顺序很重要
<div v-on:click.capture="doThis">...</div>  //添加事件监听器时使用事件捕获模式
<div v-on:click.self="doThat">...</div> //点击自身时才会触发函数,冒泡或捕获都会略过自身
<a v-on:click.once="doThis"></a>   //点击事件将只会触发一次

5.Vue绑定样式的方式

v-bind:class :动态地切换 class,v-bind:class 指令也可以与普通的 class 属性共存

<div class="myclass" v-bind:class="{ active: isActive }"></div>

data:

data: {
  isActive: true,
  hasError: false
}

渲染结果为:

<div class="myclass active"></div>

v-bind:style:

<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
data: {
  activeColor: 'red',
  fontSize: 30
}

渲染结果:

<div style="color: red; font-size: 30px;"></div>
发布了5 篇原创文章 · 获赞 6 · 访问量 67

猜你喜欢

转载自blog.csdn.net/qq_22841567/article/details/104723852