当前位置: 首页 > Web前端 > vue.js

JS框架:Vue的实用主义全解

时间:2023-04-01 11:44:28 vue.js

Vue的实用主义全解What'sinoptionsVue(options),options包含五类属性数据:data、props、propsData、computed、methods、watchdom:el、template、render、renderError生命周期hooks:beforeCreate,created,beforeMount,mounted,beforeUpdate,Updated,activated,deactived,beforeDestroy,destroyed,errorCaptured资源:directives,filters,componentscomposition:parent,mixins,extends,provide,inject其他:暂时没看到。基本属性el-挂载点用法:newVue({el:'#app'})等同于:newVue().$mount('#app')data-内部数据用法:data:{...}/data(){return{...}}支持函数和对象形式,推荐函数写法-方法事件处理或常用函数组件-组件使用:importCpnform'./Cpn.vue'...newVue({components:{abc:Cpn}template:``...})其他组件导入方法:在页面中创建组件://第一个参数为组件名称,第二个参数为vueinstanceoptionsVue.component("Abc",{template:"

n
"...})前两个的组合newVue({components:{Abc:{template:``,methods:{}...}}})命名规则:组件一般以大写字母开头。lifehook:created(){...}当实例出现在内存中时调用mounted(){...}//当实例出现在页面中时调用updated(){...}//当实例出现在页面中时调用实例数据更新destroyed(){...}//实例销毁时调用props:定义:自定义组件的属性使用方法://Demo组件内部:exportdefault{props:['counter']//也可以传入回调函数}//在main.js中:template:``注意:如果要给自定义组件的属性赋值变量,需要添加一个冒号“:”在它之前。例如://inmain.js...data:{n:5}template:``高级属性计算-计算属性语法:data:{firstName:'Oliver',lastName:'Young'}computed:{//相当于只getmethodName(){returnthis.firstName+this.lastName}}computed:{Name:{get(){returnthis.firstName+this.lastName}set(value){this.firstName=value}}}优点:简化代码,避免重复,方便修改内置缓存功能:如果依赖的属性没有变化,则不会重新计算何时使用:如果一个数据依赖在其他数据上,使用computedwatch-监听目的:当数据改变时,调用一个函数语法:1.```watch:{o1:function(newVal,oldVal){},//newVal和oldVal是o2(){},//es6语法o3:[f1,f2]//依次执行f1和f2o4:{handler(){//处理函数},deep:true/false,//见下面解释immediate:true/false//是否第一次执行},o5:'callbackName',//回调函数ion,写在methods"obj.a":function(){}//监听obj的属性}```2.`vm.$watch('obj',fun,{deep:true})`What是“变”?简单类型:当值改变时,它就改变。复杂类型(object):只有地址改变了,它才改变。比如:本来是obj:{num:1},后来重新赋值给obj:{num}:1,又分配了新的内存,所以变了。当deep=true时,改变obj.a也意味着obj改变了。computedV.Swatchcomputed:计算属性;看:听。computed:调用时不需要加括号(),会自动缓存。如果依赖项未更改,则不会重新计算。watch:如果被监控的属性发生变化,执行回调。Vue框架会传递两个参数给回调,分别是newValue,oldValueimmediate:第一次渲染时是否监听。deep:监听一个对象时是否监听对象中属性的变化{{n}}
//main.jsconstvm=newVue({el:'#app',data(){return{n:0}},methods:{add(){this.n+=1}}})写在选项中(vue完整版)//index.html
//main.jsconstvm=newVue({el:'#app',template:`
{{n}}+1
`,data(){return{n:0}},methods:{add(){this.n+=1}}})with.vuefile(vueruntimeversion)//Demo.vue//iindex.html
//main.jsimportDemofrom'./Demo'newVue({render:h=>h(Demo)}).$mount('#app')template模板语法表达式——{{}}{{content}}:内容可以是数据中的数据,表达式,函数调用绑定属性——v-bind:当标签的属性需要使用数据域中的数据时,有两种写法示例如下:data:{className:'red'}...//或样式绑定—:styledata:{fontsize:16、top:10}CSS属性名可以用驼峰式或破折号分隔(记得把它们括在引号)来命名绑定事件—v-on:用法+1n+1简写+1条件判断——v-if0">x大于0
x等于0x小于0用法很明显,也很容易理解loop—v-forfor(value,key)inobject/for(item,index)inarray:key="index"会有bug,最好不要用index作为key显示/隐藏—v-shown为偶数类似于n为偶数v-model当你的代码出现如下形式时:可以简写为modifierv-on:{.keyCode|.keyAlias}.prevent,.stopetc.Wait:当用户输入回车时,调用fn:输入回车时,调用fn/a>:阻止默认事件:停止事件冒泡v-bind:.sync等.sync用法详解(子组件改变父组件值)v-model:.lazy.number.trim更多修饰符Vue文档directives-instructions内置指令:v-on,v-for,v-if等自定义指令:v-xxx两种写法:declareaglobalDirective:Vue.directive('x',directiveOptions)声明一个本地指令newVue({...directives:{"x":directiveOptions}})directiveOptions中有哪些属性?bind(el,info,vnode,oldVnode)-createdinserted(el,info,vnode,oldVnode)在一个类似的生命周期-mountedupdate(el,info,vnode,oldVnode)-updatedcomponentUpdated(el,info,vnode,oldVnode)-基本上不使用unbind(el,info,vnode,oldVnode)-destroyed的作用详细使用说明:主要用于dom操作如果某个dom操作使用频率高或者过于复杂,可以封装成一条指令,简化代码mixins-混合写法//demo.jsinsideconstdemo={data(){return{a:0,...//otherpublicproperties}}methods:{add(a){returna+1}...//其他公共方法}}////作用:减少hooks的数据、方法、代码重复,本质上是重复。SmartMergeextends-Inheritance类似于mixin,看文档就可以了。provide/inject-Provide/inject不用于普通程序。如果您使用它,请查看文档。vue/cli目录结构分析public--静态文件src--源码assets--picture,SVGcomponents--组件router--路由store--用来放storeviews--放视图(相当于一个包裹了多个组件的大组件)main.ts--入口文件,用于呈现整个页面registerServiceWorker.ts-PWA相关文件shims-tsx。ts&shims-vue.ts--TS语句测试--测试代码tsconfig.json--TS配置vue.config.js--webpack配置待续。