• Vue框架第二篇


    Vue第二篇

    循坏指令

    <div id='app'>
        <p>
            {{ nums[2] }}
        </p>
        <ul>
            <!--只遍历值-->
            <li v-for='num in nums'>{{ num }}</li>
        </ul>
        
        <ul>
            <!--值与索引-->
            <li v-for='(num,index) in nums'>{{ num }} {{ index }}</li>
        </ul>
        
        <ul>
            <!--值,键,索引-->
            <li v-for='(v,k,i) in dic'>{{ v }} {{ k }} {{ i }}</li>
        </ul>
    </div>
    

    评论案例

    <style>
        span {
            marign-left:100px;
            cursor:pointer; 
            color:green;
        }
        span:hover {
            color:red;
        }
    </style>
    
    <div id='app'>
        <p>
            <input type='text' v-model='val'>
            <button @click='add'>
                评论
            </button>
        </p>
        <ul>
            <li v-for='(info,i) in infos'>
            	{{ info }}
                <span @click='del(i)'>x</span>
            </li>
        </ul>
    </div>
    
    <script src='js/vue.js'></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                infos:[],  //管理所有留言
                val:''     //管理当前留言
            },
            methods:{
            del:function(i){
            //splice:从哪个索引开始 操作的位数 操作的成果(可变长)
            this.infos.splice(i,1)
        },
            add:function(){
                let val=this.val;
                if(val){
                    this.infos.splice(0,0,val);  //评论
                    this.val = ''    //评论完留言框为空
                }
            }
        }
        })
    </script>
    

    解决插值表达式符号冲突

    <div id="app">
        ${ msg }
    </div>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                msg: '12345'
            },
            delimiters: ['${', '}']
        })
    </script>
    

    实例成员之computed

    <script>
        new Vue({
            el:'#app',
            data:{
                first_name:'',
                last_name:'',
            },
            computed:{
                //1.在computed中定义的变量的值等于绑定的函数的返回值
                //2.绑定的函数中出现的所有Vue变量都会被监听
                full_name:function(){
                    return this.first_name+this.last_name
                }
            }
        })
    </script>
    

    实例成员之watch

    <script>
        new Vue({
            el:'#app',
            data:{
                first_name:'',
                last_name:'',
                full_name:''
            },
            watch:{
                //1.后方绑定的函数就是监听前方的变量,变量值改变,函数被调用
                //2.绑定的函数中出现的所有Vue变量都会被监听
                full_name:function(){
    				let res = this.full_name.split('');
                    let this.first_name = res[0];
                    let this.last_name = res[1];
                }
            }
        })
    </script>
    

    总结

    指令:
    	文本:{{}} v-text v-html v-once
    	属性:v-bind:href  :href  :class='c1'  :class='[c1,c2]'  :style='s1' (s1={color:"red"})
    事件:v-on:click  @click
    	@click='action'  @click='action(msg)'  @click='action($event)'
    表单:v-model
    条件:v-show v-if v-else-if v-else
    循环:v-for='(value,index) in list'
    	v-for='(value,key,index) in dict'
    
    成员:
    	el:挂载点
    	data:数据
    	methods:方法
    	computed:计算(监听方法内所有的变量,返回值给绑定的变量,该变量无需再data中声明)
    	watch:监听(监听绑定的变量,绑定的变量必须在data中声明)
    

    组件

    组件:有html模板,有css样式,有js逻辑的集合体
    根组件的模板就使用挂载点,子组件必须自己定义template(局部子组件,全局子组件)
    组件里面只能有一个根标签
    

    局部组件

    <div id='app'>
        <abc></abc>
        <abc></abc>
    </div>
    <script src='js/vue.js'></script>
    <script>
    	//定义局部组件
        let localTag = {
            //1.data要达到组件的复用,必须为每个组件提供一个名称空间(作用域)
            //2.data的值就是一个存放数据的字典
            //需要满足1和2,data值为一个可以产出名称空间的函数和返回值,返回值是字典
            data:function(){
                return {
                    count:0,
                }
            },
            template:`
    		 <div class="box" style="border: solid;  100px">
                <h1>标题</h1>
                <p class="p1">文本内容</p>
                <p @click="action" class="p2" style="background: yellowgreen">被点击了{{ count }}下</p>
            </div>
    `,
            methods:{
                action:function(){
                    this.count++
                },
            }
        };
        new Vue({
            el:'#app',
            data:{
                
            },
            //局部组件必须注册
            components:{
                'abc':localTag
            }
        })
    </script>
    

    全局组件

    <div id='app'>
        <!--在标签中建议使用 - 语法命名,对应js中就是驼峰命名-->
        <old-boy></old-boy>
    </div>
    <script src="js/vue.js"></script>
    <script>
    	//Vue.component(组件,{组件主体});
        Vue.component('oldBoy',{
            data:function(){
                return {
                    count:0
                }
            },
            template:`
    		 <div class="box" style="border: solid;  100px">
                <h1>全局</h1>
                <p class="p1">文本内容</p>
                <p @click="action" class="p2" style="background: yellowgreen">被点击了{{ count }}下</p>
            </div>
    `,
            methods:{
                action:function(){
                    this.count++
                },
            }
        });
        //全局组件无需注册
        new Vue({
            el:'#app',
            data:{
                
            }
        })
    </script>
    

    组件间的交互

    父传子

    <div id='app'>
        <!--locl-tag就可以理解为自定义标签,使用msg变量值由父组件提供-->
        <!--local-tag标签代表的是子组件,lucas为标签的自定义属性-->
        <!--在子组件内部能拿到lucas,就可以拿到父组件的信息-->
        <local-tag :lucas='msg'></local-tag>
    </div>
    
    <script src="js/vue.js"></script>
    <script>
        let localTag = {
            //子组件拿自定义属性
            props:['lucas'],
            template:`
    		<div>
                <h1>信息</h1>
                <p>{{ locas}}</p>
            </div>
    `
        };
        new Vue({
            el:'#app',
            data:{
                msg:'父级的信息'
            },
            components:{
                localTag  //在页面中<local-tag>
            }
        })
    </script>
    

    子传父

    <div id='app'>
        <h1>
            {{ title }}
        </h1>
        <global-tag @recv='get_title'></global-tag>
    </div>
    
    <script src="js/vue.js"></script>
    <script>
        Vue.component('global-tag',{
            template:`
    		 <div>
                <input type="text" v-model="msg">
                <!--<button @click="action">修改标题</button>-->
            </div>
    `,
            data:function(){
                return {
                    msg:''
                }
            },
            methods:{
                //action:function(){
                    //let msg = this.msg;
                    //this.$emit('recv',msg)
                },
            watch:{
                msg:function(){
                    //只要msg有变化,就将值同步传给父组件
                    this.$emit('recv',this.msg)
                }
            }
            }
        });
        
        new Vue({
            el:'#app',
            data:{
                title:'父组件定义的标题'
            },
            methods:{
                get_title:function(msg){
                    this.title = msg
                }
            }
        })
    </script>
    
  • 相关阅读:
    关于爬虫中常见的两个网页解析工具的分析 —— lxml / xpath 与 bs4 / BeautifulSoup
    纯手工打造简单分布式爬虫(Python)
    原创python:windows解决genymotion appium adb 的问题。
    安装appium桌面版和命令行版
    Appium+Python 自动化appium常用元素定位方法
    python selenium 对浏览器标签页进行关闭和切换
    安装scrapy框架出错的解决
    PyCharm的基本快捷键和配置简介
    python正则表达式详解
    Python多进程库multiprocessing中进程池Pool类的使用
  • 原文地址:https://www.cnblogs.com/yanminggang/p/11098979.html
Copyright © 2020-2023  润新知