Vue实战

    xiaoxiao2022-07-14  187

    初始化一个Vue项目
    npm install --global vue-cli@2.9.3vue listvue init webpack project_namecd project_namenpm run dev
    new 一个 vue 对象
    const vm = new Vue({ el:'#app', name:'vue_name', data(){ return { key:value } }, components:{ HelloWorld, }, directives:{ //devtices name }, template:'<App/>', methods:{ //此处定义方法 }, beforeCreeate(){ //生命周期函数 }, props:{ }, watch:{ attribute(newValue,oldValue){ //watch 选项提供了一个方法来响应数据的变化 } } })
    组件

    组件分为全局组件和局部组件

    单文件组件的文件名,应该始终以单词大写开头(PascalCase),或者始终以横线(kebab-case)连接。推荐使用大写开头的方式。组件里可以引用组件

    非全局组件的使用方法
    定义一个组件Bexport default { } 在A文件中引入B ()import b_name from '@/components/B' 在A文件中注册组件Bcomponents:{ b_name, } 在A文件 template中使用B组件,注意使用闭合标签
    全局组建的使用
    定义全局组件注册全局组件 import Vue from 'vue' import Message from './Message' Vue.component('Message', Message) 注册全局组件需要使用 Vue.component,第一个参数 'Message' 是组件名称,第二个参数 Message 是一个对象或者函数,我们这里是一个对象 入口js文件引入全局组件使用全局组件
    基础语法
    插值:Vue.js 使用 Mustache 语法 (双大括号)进行数据绑定HTML 特性,不能使用 Mustache 语法,而要使用 v-bind 指令,:src 是 v-bind:src 的缩写,使用缩写可以简化模板和提高开发效率指令(Directives)是带有 v- 前缀的特殊属性,指令属性的值是单个 JavaScript 表达式( v-for 是例外),当表达式的值改变时,其作用的 DOM 也将响应式的改变。v-for指令的两种用法 <li v-for="item in items"> {{item}} </li> <li v-for="(item,index) in items"> {{index}} </li> //在组件上使用 v-for 指令进行渲染的时候,需要添加 key。 它可以方便 Vue 跟踪每个节点的身份,从而重用和重新排序现有元素。每一项的 key 应该是唯一的 DOM 事件 @click="methodName(args)" 不要忘记在 methods 中定义事件v-html指令用于直接渲染html模板字符串v-model 指令可以在表单 <input> 及 <textarea>元素上创建双向数据绑定v-show 是一个条件渲染指令,它只切换元素 CSS 属性的 display实例的$nextTick 方法用于在下次 DOM 更新循环结束之后执行延迟回调,nextTick 有一个全局方法 Vue.nextTick,在实例上使用 this.$nextTick,不要忘记 $$emit 用于触发当前实例上的事件,其第一个参数是事件名称,后面还可以附加若干参数。
    Class与Style属性绑定方法
    对象方法 <div class="static" v-bind:class="{ active: isActive, 'text-danger': hasError }"></div>数组方法 <div v-bind:class="[isActive ? activeClass : '', errorClass]">对于复杂的可以使用混合模式 <div v-bind:class="[{ active: isActive }, errorClass]">
    指令

    指令包括非全局注册的指令,全局注册指令 一个指令定义对象可以提供如下几个钩子函数(均为可选): bind:只调用一次,指令第一次绑定到元素时调用,在这里可以进行一次性的初始化设置; inserted:被绑定元素插入父节点时调用; update:所在组件的 VNode(虚拟节点)更新时调用,但是可能发生在其子 VNode 更新之前; componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用; unbind:只调用一次,指令与元素解绑时调用,在这里可以移除绑定的事件和其他数据; 指令钩子函数会被传入以下参数: el:指令所绑定的元素,可以用来操作 DOM ; binding:一个对象,binding.value 表示指令的绑定值,如 v-title="‘我是标题’" 中,绑定值为’我是标题’; vnode:Vue 编译生成的虚拟节点; oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。 其中 binding 主要包括 例如 v-validator:input.required="xxx" binding.name:指令名,不包括 v- 前缀,这里是 ‘validator’ ; binding.value:指令的绑定值,这里是xxx ; binding.arg:传给指令的参数,这里是 ‘input’ ; binding.modifiers:一个包含修饰符的对象,这里是 { required: true }

    下面是非全局指令的使用步骤

    自定义指令局部引入指令注册指令使用指令 例如自定义了一个指令title 则在使用的时候是这样的v-title="bind.value"

    下面是全局指令的使用步骤

    新建指令注册全局指令(js文件)入口main.js引入全局指令使用全局指令
    vue-router

    vue-router 是一个官方的路由库,其使用非常方便,我们只需将组件映射到路由,然后通过在页面中添加 <router-view/>进行渲染,就可以达到切换路由的目的。

    安装vue-router npm install vue-router --save创建路由配置文件(js文件) import Vue from 'vue' import Router from 'vue-router' Vue.use(Router); const routes = [ { path:'/auth/register', //路由的路径 name:'Register', //路由的名称 component:() => import('@/views/auth/Register') //对应的视图组件,此方法可以实现路由的懒加载,即使用的时候才加载 }, ]; const router = new Router({ mode:'histort', //路由模式,默认值 'hash' 使用井号( # )作路由,值 'history' 可利用 History API 来完成页面跳转且无须重新加载; routes //具体的路由配置列表 }); export default router 入口js文件引入路由配置,并在vue实例中注入路由添加 <router-view>

    <router-view> 是一个功能组件,它会渲染路径匹配到的视图组件

    添加<router-link>

    <router-link>组件支持用户在具有路由功能的应用中导航,通过 <router-link> 上的 to 属性可以指定目标地址

    工具函数
    定义一个工具函数 譬如export default function func_name(){ return {}}Vue文件引入工具类函数,直接使用
    Props
    props: { // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证) propA: Number, // 多个可能的类型 propB: [String, Number], // 必填的字符串 propC: { type: String, required: true }, // 带有默认值的数字 propD: { type: Number, default: 100 }, // 带有默认值的对象 propE: { type: Object, // 对象或数组默认值必须从一个工厂函数获取 default: function () { return { message: 'hello' } } }, // 自定义验证函数 propF: { validator: function (value) { // 这个值必须匹配下列字符串中的一个 return ['success', 'warning', 'danger'].indexOf(value) !== -1 } } } }) 注意在 JavaScript 中对象和数组是通过引用传入的,所以对于一个数组或对象类型的 prop 来说, 在子组件中改变这个对象或数组本身将会影响到父组件的状态。 props 是用来传递数据的,我们需要在子组件用 props 选项声明它预期的数据 所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定, 每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop props 的绑定默认是单向的,我们要在组件内部更新props的某一值,需要在父组件上添加 .sync 修饰符,以创建『双向绑定』
    最新回复(0)