vue框架

vue前端框架(MVVM 模型:Model-View-ViewModel)

jquery 是 获取元素,完成特效;

vue 是 方便操作 ,控制数据 ,也可完成特效

vue.js

script src 导入

V,view 视图模板

div:

{{ message }}

script: vue.js要控制器的内容范围,必须先通过id来设置。

vue核心对象vm实例化:

var vm = new Vue({     // VM 时刻保证视图模板中的数据和data 数据一致 双向绑定 连接 V 和 M

	el:'#d1',    // vue 操作的元素 选择符

	data:{       //保存数据  M,model 模型

		message:'hello world',

		}

})

注意:

一个网页多个vue对象,名称 vm1 , vm2,一个vue对象负责一个特殊功能,js代码区分大小写

标签 一定 要在vue代码的前面,否则,识别不到 或者 window.onload = function(){...}

console.log(vm.$el)

console.log(vm.$.data)

console.log(vm.$data.message)

console.log(vm.message) message 是 data 里的数据,可以直接 点 .

1 显示数据:注意:要在el指定的标签里

普通显示纯文本数据,{{ }} {{ num + 1}} {{ message.toUpperCase }} js内置的方法可以使用 三元表达式:{{ num2>num1?num2:num1 }}

显示标签文本,v-html = 'img' , data:'img' 的包含标签的文本就可以显示了,

表单框中显示的数据: v-model = 'name',标签属性;data 数据: ’name':'aaa',修改文本内容, data 里的数据也发生了改变,即网页其它引用这个数据 的地方 全部都改了。

2 常用指令:

指令 (Directives) 是带有“v-”前缀的特殊属性。每一个指令在vue中都有固定的作用。

指令会在vm对象的data属性的数据发生变化时,会同时改变元素中的其控制的内容或属性。

vue1.x写法 vue2.x的写法

vue1.x写法             vue2.x的写法
v-html         ---->   v-html
{{ 普通文本 }}          {{普通文本}}
v-bind:属性名   ---->   :属性    为了让 vue 识别这个属性
v-on:事件名     ---->   @事件名
2.1 操作属性:

格式:

<标签名 :标签属性="data属性"></标签名>

<p :title="str1">{{ str1 }}</p> <!-- 也可以使用v-html显示双标签的内容,{{  }} 是简写
2.2 事件:
data:{
            str1: "hello",
            num: 20,
            price: 7.1,
            url1: "http://www.baidu.com",
            url2: "http://www.taobao.com"
          }

methods:{
	change(){    				// change:function(){}
		this.type = 'text'
}
}

事件:@事件名:@click 1.x: v-on:事件名

@click = "change" 需要methods @click="goods.num++" 直接的方法,函数

绑定的事件的事件名,全部都是js的事件名:
@submit ---> onsubmit
@focus ---> onfocus
@blur ---> onblur
@click ---> onclick

data:{

	goods:{
		num:0
	}
}

methods:{
	if(this.goods.num--<1){}   这里是执行了 -- 的 然后进行比较
                             
    if(this.num<=1){     // 当目前的数字是0,那么显示就是0了,如果不是0,就减去1
        this.num=0;
     else{
         this.num--;
                    }
}
2.3 操作样式: :style 不建议用

例子:隔行变换颜色

<tr :bgcolor="index%2==0?'#ffaaaa':'#aaaaff'"  v-for="obj,index in goods_list">
                <td>{{obj.name}}</td>
                <td>{{obj.num}}</td>
                <td>{{obj.price}}</td>
                <td>{{index}}</td>
            </tr>

总结:在标签里,要想通过 vue 操作标签的属性,就要把属性前 加 : ,这样才能识别属性。

在标签里,属性值要用 引号 括起来,其中的 变量 运算 等都不需要 {{}} , 引号等包裹,直接写就好了。在这个例子中,颜色值当然要引号,,,

类:data里的属性值 没引号;style:data里的属性值有引号;

1 操作类:
:class = 值 或 对象

格式:
   <h1 :class="值">元素</h1>  值可以是字符串、对象、对象名、数组

:class = "{cla1:true}"

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
    <style>
    .box1{
        color: red;
        border: 1px solid #000;
    }
    .box2{
        background-color: orange;
        font-size: 32px;
    }
    </style>
</head>
<body>
    <div id="box">
        <!--- 添加class类名,值是一个对象
        {
         class类1:布尔值变量1,
         class类2:布尔值变量2,
        }
         -->
        <p :class="{box1:myclass1}">一个段落</p>
        <p @click="myclass3=!myclass3" :class="{box1:myclass2,box2:myclass3}">一个段落</p>
    </div>
    <script>
        let vm1=new Vue({
            el:"#box",
            data:{
                myclass1:false, // 布尔值变量如果是false,则不会添加对象的属性名作为样式
                myclass2:true,  // 布尔值变量如果是true,则不会添加对象的属性名作为样式
            },
        })
    </script>

    <!-- 上面的代码可以:class的值保存到data里面的一个变量,然后使用该变量作为:class的值 -->
    <style>          常用
    .box4{
        background-color: red;
    }
    .box5{
        color: green;
    }
    </style>
    <div id="app">
        <button @click="mycls.box4=!mycls.box4">改变背景</button>
        <button @click="mycls.box5=!mycls.box5">改变字体颜色</button>
        <p :class="mycls">第二个段落</p>
    </div>
    <script>
        let vm2 = new Vue({
            el:"#app",
            data:{
                mycls:{
                    box4:false,
                    box5:true
                },
            }
        })
    </script>

    <!-- 批量给元素增加多个class样式类 -->
    <style>
    .box6{
        background-color: red;
    }
    .box7{
        color: green;
    }
    .box8{
        border: 1px solid yellow;
    }
    </style>
    <div id="app2">
            <p :class="[mycls1,mycls2]">第三个段落</p>
    </div>
    <script>
        let vm3 = new Vue({
            el:"#app2",
            data:{
                mycls1:{
                    box6:true,
                    box7:true,
                },
                mycls2:{
                    box8:true,
                }
            }
        })
    </script>
</body>
</html>

:值: fc变量,'red',

属性的写法: 有横线的加引号,或者backgroundColor

或 数组 [cla1,cla2,cla3] 添加多个样式

或 三元表达式 "bool?'box1':'' " 满足条件 样式 1 否则 样式 2 比如 disabled

2 操作 style

传值:值是json对象
<div :style="{color: activeColor, fontSize: fontSize + 'px' }"></div>

data: {
             activeColor: 'red',
             fontSize: 30
         }

传对象:
<div v-bind:style="styleObject"></div>

data: {
      styleObject: {
             		color: 'red',
             		fontSize: '13px'
			  			}
				 }

值是数组:
<div v-bind:style="[style1, style2]"></div>

data: {
      style1:{
             color:"red"
             },
      style2:{
              background:"yellow",
              fontSize: "21px"
                     }
				}
 <span @click="num=0" :class="num==0?'current':''">国内新闻</span>
 <span @click="num=1" :class="num==1?'current':''">国际新闻</span>
 <span @click="num=2" :class="num==2?'current':''">银河新闻</span>

 <div class="list" :class="num==0?'active':''">国内新闻列表</div>
 <div class="list" :class="num==1?'active':''">国际新闻列表</div>
 <div class="list" :class="num==2?'active':''">银河新闻列表</div>

3 判断:条件渲染

v-if v-else v-else-if v-if="num == 1"

条件成立,就显示标签 直接去掉了标签 dom操作remove

v-show 通过display:none属性 显示隐藏属性 和 v-if 一样,标签的显示与隐藏

标签元素:
	<h1 v-if="num==1">num的值为1</h1>
	<h1 v-else-if="num==2">num的值为2</h1>
	<h1 v-else>num的值是{{num}}</h1>
data数据:
  		data:{
      		num:2
      }

4 循环:列表渲染

data:{

goods_list:[...字典等]}

v-for="goods in goods_list"

v-for="goods,index in goods_list"

参数1,参数2 : goods 列表的每个值, index 索引

列表:
<li v-for="value,index in book">{{value}}</li>  值 和 索引
字典:
<li v-for="attr, value in book">{{attr}}:{{value}}</li>  key 和 value
posted @ 2020-06-16 19:07  pythoner_wl  阅读(118)  评论(0编辑  收藏  举报