zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    高精度计算
    高精度除以低精度
    P1258 小车问题
    POJ 2352 stars (树状数组入门经典!!!)
    HDU 3635 Dragon Balls(超级经典的带权并查集!!!新手入门)
    HDU 3938 Portal (离线并查集,此题思路很强!!!,得到所谓的距离很巧妙)
    POJ 1703 Find them, Catch them(确定元素归属集合的并查集)
    HDU Virtual Friends(超级经典的带权并查集)
    HDU 3047 Zjnu Stadium(带权并查集,难想到)
    HDU 3038 How Many Answers Are Wrong(带权并查集,真的很难想到是个并查集!!!)
  • 原文地址:https://www.cnblogs.com/pythonwl/p/13143877.html
Copyright © 2011-2022 走看看