v-if、v-show、v-for v-bind

v-if  

条件为真 所在标签元素显示  为假不显示   原理: 不加载该元素

v-show

条件为真 所在标签元素显示  为假不显示   原理: 设置display:none;

你会看到同样的内容,但两者问确实存在其他的影响和差异。 首先 ,因为使用 v-if 隐藏的内部元素不会被显示, vue 不会尝试生成对应的 HTML 代码: 而对于 v-show 指令,事实并非如 。这意味着隐藏尚未加载的内容时, v-if 令更好一些

v-for 循环 

循环数组  直接写item出来的时数组元素每一项内容

 <ul v-for="(value) in dog2" :key="value.name">
      <li> {{value}}</li>
</ul>
 dog: [{
                        name: "大",
                        url: "www",
                        slogan: "热爱知识!"
                    }, {
                        name: "大白",
                        url: "www.dreamstudio",
                        slogan: "热爱知识,传递"
                    }, {
                        name: "大白菜",
                        url: "www.dreamstudio.top",
                        slogan: "热爱知识,传递技术!"
                    }],

循环对象  循环多项(value,key)固定顺序

<ul v-for="(value,key) in dog1" :key="value.name">
      <li> {{value}} - {{key}}</li>
</ul>

--------------------------------------------------------------------------------------------

v-bind 指令用于将某个值绑定到 HTML 属性上。通常用冒号表示 使这个属性值变成动态的可加可减

响应式

created 函数方法会在应用初始化完成后执行。 vue 的生命周期钩子会在后面详细介绍, 所以暂时不用太过担心这个函数 这个方法中的 this.seconds 直接指向 data 对象中的 相应值,并且通过操控它来更新模板。

created() {
                setInterval(() => {
                    this.time++;
                }, 1000)
            },
//当time改变时vue可以检测到 做出响应

vue响应式的实现原理

vue修改了添加到了data上的对象当该对象发生改变时vue会收到通知,从而实现响应式。对象的每个属性会被替换为 getter setter 方法  因此可以像使用正常对象一样去使用他们,当你修改时vue会知道他已经发生改变

注意事项 

响应式对于对象而言 要注意必须要为vue实例初始化时候添加的,该实力创建之后继续添加的属性就不再是相应式的

canst vm = new Vue({
data: {
formData: {
time:'som use'
}
}
}); 
vm.formData.name = 'username';
//time是响应式的  name属性不是后加的

非i响应式的解决方式

1、

提前定义好属性名就好在data中 将值赋值为默认值(最简单最常用)

formData: {
use name :'someuse'
name: undefined 
}

2、覆盖此对象重新创建该对象

vm.formData =Object.assign({}, vm.formData, {
name: 'Some User'
}); 

3、set方法

vue提供了Vue.set()方法

对于数组而言要注意

不可以通过数组索引来设置数组的值

解决方式

使用 splice () 方法在去移除旧元素井添加新元素

vm.dogs.splice(2, 1,’Bob ’);

2、vue提供了Vue.set()方法

Vue.set(vm.dogs, 2,’Bob ’);

改变数组的长度

不可以vue不可以监测数组的改变

--------------------------------------------------------------

v-bind 属性绑定   可以用::代替


<body>
	
	<div id="vue-div">
		//使用(v-bind:)该属性值与data中相关联可以改变 
		<img v-bind:src="imgUrl" style="width: 50px;height: 50px;display: block;"/>
		使用(:src),简写方式
		<img :src="imgUrl" style="width: 50px;height: 50px;"/>
	</div>
 
<script type="text/javascript" src="../js/vue.min.js"></script>
<script type="text/javascript">
var app = new Vue({
	el: "#vue-div",
	data: {
		msg : "aabbdDD-Hello-World",
		imgUrl : "https://cn.vuejs.org/images/logo.png"
	}
});
</script>
</body>
</html>

v-bind对于class和style的绑定 区别于其他属性

1、class绑定

<div :class="['active']">ddd</div>
<div :class="{active:bool}">ddd</div>
<div class="ddd" tabindex="-1">ddd</div>
//对象跟数组可以写直接量 也可以配合写变量

style属性的绑定

<div :style="['active']">ddd</div>
<div :style="{active:bool}">ddd</div>
//对象跟数组可以写直接量 也可以配合写变量

-------------------------------------------------------

表单双向数据绑定 v-model    input标签value与vue实例对象中的数据相互影响

你可以用 v-model 指令在表单 <input><textarea> 及 <select> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。

v-model 会忽略所有表单元素的 valuecheckedselected 特性的初始值而总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的 data 选项中声明初始值。

v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件:

  • text 和 textarea 元素使用 value 属性和 input 事件;
  • checkbox 和 radio 使用 checked 属性和 change 事件;
  • select 字段将 value 作为 prop 并将 change 作为事件。

修饰符

.lazy

在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步  你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:(输入完成后触发) 相当于由input事件转移到了change事件  会导致双向数据绑定失去作用

<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="msg" >

.trim

如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:

不会影响双向数据绑定

<input v-model.trim="msg">
发布了56 篇原创文章 · 获赞 1 · 访问量 1232

猜你喜欢

转载自blog.csdn.net/qq_40819861/article/details/101429525