zoukankan      html  css  js  c++  java
  • VUE-Day03组件开发

    复习:

    ①指令

    vue自动将内存放入界面,不同位置需要不同指令

    数据放到内容中,使用双花括号{{}},插值语法

    1. 数据放到属性中动态绑定,用冒号:

    反复根据数组中元素生成多个元素v-for

    控制一个元素显示隐藏v-show

    多个元素选其一显示v-if

    绑定事件@

    事件处理函数写在methods中

    如何获得鼠标位置,第一步绑定的时候使用$event关键字传入事件对象,然后在处理函数中用e接住

    阻止默认行为e.preventDefault();

    取消冒泡stop

    按回车触发@keyup.13

    绑定内容特殊情况,内容不是文本是HTML片段,此时双花括号绑定会保持原样,内容不会被编译,要用v-html

    v-text效果等同于{{}}

    在vue组件加载完之前临时隐藏绑定元素,防止用户看到双花括号语法,v-cloak使用时需要定义属性选择器[ v-cloak ] {display:none}

    v-pre保护内容中的双花括号语法不被编译

    v-once只在开始时绑定一次,之后不再绑定,即使模型数据改变也不变

    12个指令都是单向的,只能将内存model中的数据绑到视图界面view中,收集用户信息需要用表单元素,必须要双向绑定v-model

    文本框,文本域都是让用户填写内容的,这种都保存在value中,所以v-model会自动绑定value,当value发生变化会自动更新model中的变量。

    但是有一些元素value是写死的,比如说radio,它的绑定原理有两个方向,首先将模型数据绑定到界面时,它是拿被绑定的模型变量和radio上的值作比较,只有相等时才会被选中,当选中某一个radio时,它会反向将当前选中的radio的value自动更新到内存中。

    checkbox单独使用时,只能改checked的属性,选中就是checked,使用时只需要把布尔值绑给checked就可以了。

    select,value是写在每一个option上的,但是v-model要写到select上,因为切换选中项时改的不是option的value而是改的整个select的value,当绑定时,会拿变量值和每个option比较,那个相等选那个,修改选中项之后,会自动更新回到value中。

    这四个表单元素,无固定规律,分别看待。

    双向绑定原理,其实是依靠一种监视机制来实现,比如知道vue中写一个死循环(有很多方法制作死循环扫描界面,while,for,setInterval),当界面发生变化时自动更新内存中的变量,借助此机制,只要变量发生变动(写在watch中,监视谁就写谁),以此达到只要模型变量变化就能自动完成一件事情。

    new Vue({

        el:"#***",

        data:{...},

        watch:{

            模型变量(){

                this.模型变量名...

            }

        }

    })

    class和style,如果批量绑定样式,class更好,有两种方式,第一种把class当做字符串绑定,一个元素中可以写两个class,写死的不会变的放在正常class,:class中放入只发生变化的类名。这个类名就是一个模型变量,在内存的模型变量中存着这些要使用的类名。另一种class方式,就是对象方法。

    style用于精细控制元素的位置,或者某一个css属性。style用拼接字符串方式很不直观,所以推荐用对象方式:style中只写一个变量名,在模型中为变量创建一个对象,其中包含所有需要用的css属性和值。

    界面上一切东西都可以绑定,属性、内容、样式,必须遵循两步骤,第一找变化(把界面中所有可能变化的地方发掘出来,然后把这些地方换成vue的绑定语法),第二定义获取模型数据(界面上有多少变化,内存模型中就要有多少数据来支持它),做vue的套路,找一切变化,改绑定语法,在内存中,想尽办法提供支持数据。  

    vue从根本上属于遥控页面,只操作数据,页面是不动的,用数据遥控页面的变化。

    ②计算属性

    页面中有一种特殊的属性,数据库中没有保存,但是页面却要显示,这就是computed计算属性,这种属性一般是依靠其他模型变量计算获得的,普通方法也是可以的,但是效率较低,每次使用都需要重新计算,但是computed可以缓存起来这个结果。计算属性绑定方式和普通属性是一样的。

    ③过滤器

    原始的东西不能直接使用,所以需要先加工再使用,接收一个参数返回一个新值,过滤器的本质其实就是一个函数。

    filter,之所以用静态方法,是因为过滤器是很大可能需要重复使用的,所以独立于任何实例之外。

    Vue.filter('过滤器名',function(val,参数1,...){

         ...val 接受当前要处理的模型数据的原始值

            return...;    

    })

    根据不同的参数值,返回不同的新值,利用参数控制过滤器的结果。

    自定义指令:

    如何:

      Vue.directive("指令名",{

         inserted(){  //指令所在的元素被加载到DOM树上后自动执行指令

              // elem 会自动获得指令所在的当前元素

                对elem执行DOM操作! 

         }

      })

    使用:<any v-指令名>

    示例:<div id="app">

                <input v-my-focus><button></button>

            </div> 

            <script>

                Vue.directive("my-focus",{

                         inserted(elem){

                               elem.focus()

                        }

                 })

                new Vue({

                        el:"#app",

                        data:{}

                })  

           </script>

    注:①自定义的指令不支持驼峰式写法,所以指令命名统一变为小写,或者用-或_分割。

        ②HTML/CSS/JS都是顺序执行的,所以在new Vue之前要准备好所有需要的东西,否则如果directive在下面,new实例检索DOM树的时候v-my-focus指令因为尚未搭建所以会无法识别。

    AXIOS:

    什么是:专门发送http请求的函数库(所谓http请求就是AJAX)

    为什么:

       ajax的几种方式:①自己封装(四步)

                                 ②jQuery:$.ajax()  引入整个jq函数库而只使用ajax,小题大作

                                 ③Vue有一个组件resource,已不推荐使用

                                 ④Axios 管方推荐

    Vue本身和ajax是没关系的,所以找到Axios处理此类需要。Vue和Axios二者也是没有必然联系的。

    如何:①引入axios.min.js  //当引入axios文件时,其实就是引入axios对象

            ②发送两种请求

            get请求:

            axios.get("url",{

                params:{

                     参数:值

                }   

            }).then(res=>{

                    获得服务端返回的结果:res.data

            })     

            post请求:

            axios.post("url","变量=值&变量=值&...").then(res=>{...}) 

            

    组件化开发:

    什么是组件:拥有独立的HTML,CSS,JS和数据的页面独立区域

    什么是组件化:今后所有页面都是由多个页面组成的

                           每定义一个网页都要先划分组件结构,再分别编写每个组件。

    为什么:

    (1)重用

    (2)便于大项目的分工协作

    (3)松散耦合

    如何:

    ①创建组件

    每个组件包含三部分:HTML/JS:<script>/CSS:<style>

    1.专属的HTML片段

    ps:组件的HTML片段必须被一个唯一的父元素包裹,<template>专门保存片段

    <template  id="选择器">

       <div>

             <button @click="change(-1)">-</button>

             <span>{{count}}</span> 

             <button @click="change(+1)">+ </button>

       </div>  

    </template>

    2.专属的JS和数据

    <script>

       Vue.component("组件名",{

           template:"选择器",//代替el,每创建一个组件,会自动代替组件标签的位置,组件是创建之后根据需求调用它的副本,template(模板)

           data:function(){

                 //每创建一个组件的副本,就自动调用过一次,为当前新副本创建一个专属的模型数据对象 

                 return{ //原来的data 

                      count:1

                 }

           }

           //其余和new Vue()完全一样

           methods:{

               change(i){

                  this.count+=i;

                  if(this.count==0)

                  this.count=1

               }

           }

       })

       new Vue({    //选择器必须在有Vue实例前提下

           el:"#app",

           data:{}

       })

    </script>

    <div id="app"> <!--主界面-->   

        <组件名></组件名> 

    </div>

    1.封装template,html结构 2.创建component,组件功能 

    ②使用组件

    组件其实就是一个标签名

    只要在主内容中,添加一个<组件名></组件名>,运行时Vue就会用组件的template代替<组件名>标签所在位置

    ③组件分类

    1.new Vue({              //根组件

           el:"#app",

           data:{} 

    }) 

    2.Vue.component("组件名",{            //全局组件:可在任意位置随意使用的组件

            template:"#tplxxx",

            data:function(){ return{} }      

    })

    3.子组件:仅限于在某个父组件内才能使用的组件

       如何:2步

          (1)只要将Vue.component降级为普通对象

                  强调:变量名用标签名(将来组件名)的驼峰方式

          (2)在父组件中添加components属性:{

                  子组件变量名,子组件变量名,  //ES6简写

           }

           Vue会将驼峰命名的组件名,转为小写,并用-分隔

                   比如:todoAdd -> todo-add

                              todoList -> todo-list

  • 相关阅读:
    TLE: poj 1011 Sticks
    UVa 116 Unidirectional TSP
    csuoj 1215 稳定排序
    UVa 103 Stacking Boxes
    UVa 147 Dollars
    UVa 111 History Grading
    怎么在ASP.NET 2.0中使用Membership
    asp.net中如何删除cookie?
    ASP.NET中的HTTP模块和处理程序[收藏]
    NET开发中的一些小技巧
  • 原文地址:https://www.cnblogs.com/goforxiaobo/p/12533024.html
Copyright © 2011-2022 走看看