简单易懂的 Vue.js 基础知识 !

根 vue 实例

let viewModel = new Vue({
    // 包含数据、模板、挂载元素、方法、生命周期钩子等选项
})

Hello Wrold 

<!-- 这是我们的 View -->
<div id="app">
  Hello {{ name }}!
</div>
// 这是我们的 Model
var model = {
  name: ‘Vue.js‘
}

// 创建一个 Vue 实例或 "viewModel"
// 它连接 View 与 Model
var viewModel = new Vue({
  el: ‘#app‘,
  data: model
})

生命周期

上图的就是ViewModel的生命周期,仔细的看其实并不难。目前先了解一下。

流程大致像这样



created()->beforeCompile()->compiled()->ready()->attached()->detached()->beforeDestroy()->destroyed()   

更详细的介绍,请点这里查看API文档

绑定

简单的理解就是模板字符串功能,放心的在任何你想用的地方去用,假如错了vue会给你提示。

定界符都是可以修改的

// 模板定界符
Vue.config.delimiters = [‘{{‘, ‘}}‘]

// html模板定界符
Vue.config.unsafeDelimiters = ["{{{", "}}}"]

数据的绑定

<span>消息: {{ msg }}</span>   <!-- 同步更新js里面的数据 -->

<span>他将永不会改变: {{* msg }}</span>   <!-- 第一次插入之后就不更新了 -->

<div>{{{ raw_html }}}</div>  <!-- 插入原生的 html -->

<div id="item-{{ id }}"></div>  <!-- 放在id中 -->

表达的绑定

不可使用,var/let关键字声明变量,也不能使用if/for流程控制。

{{ number + 1 }}   // 做简单的运算

{{ ok ? ‘YES‘ : ‘NO‘ }}   // 三元表达式

{{ message.split(‘‘).reverse().join(‘‘) }}   // 调用该对象上的方法 

指令

当其表达式的值改变时把某些特殊的行为应用到 DOM 上。

<p v-if="ok">Hello!</p> <!-- 根据if里面的值,确定是否编译 -->

<a v-bind:href="url"></a>
<!-- 等于href="{{url}}" 这里 href 是参数,将元素的 href 属性传进去。
     告诉vue元素的 href 特性跟表达式 url 的值绑定 -->

<a v-on:click="doSomething">
<!-- v-on表示监听,传入了click参数,表示当click事件发生的时候,执行doSomething函数 -->

<a v-bind:href.literal="/a/b/c"></a>
<!-- .literal 修饰符告诉指令将它的值解析为一个字面字符串而不是一个表达式 -->

v-bind 缩写

<!-- 完整语法 -->
<a v-bind:href="url"></a>

<!-- 缩写 -->
<a :href="url"></a>
<!-- 完整语法 -->
<a v-on:click="doSomething"></a>

<!-- 缩写 -->
<a @click="doSomething"></a>

过滤器

过滤器提供了一种执行文本转换的方法,比如说都转成大写字母或者几乎做任何我们想做的事情。过滤器既可以在文本插值中使用,也可以在v-bind指令的表达式中使用。

使用Vue,可以有两种不同的方式注册过滤器:全局和本地过滤器

全局过滤器

来看一个简单的示例。下面这个示例演示的是注册一个全局过滤器,其作用就是在价格前面加上美元符号:

// 声明一个全局的过滤器
Vue.filter(‘toUSD‘, function (value) {
    return `$${value}`
})

// 在模板中这样使用 文本插值的使用方式
<div id="app">
    <h1>{{ price | toUSD}}</h1>
</div>

特别声明: 过滤器定义必须始终位于Vue实例之上,否则你将会得到一个“Failed to resolve filter: toUSD”的错误信息。

本过过滤器

本地过滤器被注册到一个Vue组件中。下面这个示例展示了本地过滤器是如何创建的。这个过滤器的功能是将字母变成大写:

let app = new Vue({
    el: ‘#app‘,
    data () {
        return {
            name: ‘hello world !‘
        }
    },
    // 声明一个本地的过滤器
    filters: {
        Upper: function (value) {
            return value.toUpperCase()
        }
    }
})

<div id="app">
    <h1>{{ name | Upper }}</h1>
</div>

正如上例中看到的,本地过滤器存储在Vue组件中,作过filters属性中的函数。这个时候你想注册多少个就能注册多少个:

let app = new Vue({
    el: ‘#app‘,
    data () {
        return {
            name: ‘hello world !‘
        }
    },
    // 声明一个本地的过滤器
    filters: {
        Upper: function (value) {
            return value.toUpperCase()
        },
        Lower: function (value) {
            return value.toLowerCase()
        }
    }
})

计算属性

<div id="example">
  a={{ a }}, b={{ b }}
</div>
var vm = new Vue({
  el: ‘#example‘,
  data: {
    a: 1
  },
  computed: {
    // 一个计算属性的 getter
    b: function () {
      // `this` 指向 vm 实例
      return this.a + 1
    }
  }
})

给计算属性设置setter

computed: {
    fullname: {
        get: function() {
            return this.firstName + ‘ ‘ + this.lastName
        },
        set: function() {
            let names = newValue.split(‘ ‘)
            this.firstName = names[0]
            this.lastName = names[names.length - 1]
        }
    }
}

Class 与 Style 绑定

vue特意增强了他们,支持对象和数组绑定

Class 对象绑定

<div class="static" :class="{ ‘class-a‘: isA , ‘class-b‘: isB}"></div>

data: {
    isA: true,
    isB: false
}

<div class="static" :class="classObjcet"></div>

data: {
    classObject: {
        ‘class-a‘: true
        ‘class-b‘: false
    }
}

//渲染之后

<div class="static class-a"></div>

Class 数组语法

<div :class="[classA,classB]"></div>

data: {
    classA: ‘class-a‘
    classB: ‘class-b‘
}

// 渲染为

<div class="class-a class-b"></div>

<div :class="[classA, isB? classB : ‘‘]"></div>

// 始终添加classA对应的类名,根据isB的值确认是否添加classB对应的值。

// 在1.0.19+之后,为了更明了的写法,支持数组里面嵌套对象语法

<div :class="[classA, {classB: isB, classC: isC}]"></div>

Style 对象语法

CSS 属性名可以用驼峰式(camelCase)或短横分隔命名(kebab-case),自动添加浏览器的前缀。

<div :style="{color: activeColor, fontSize: fontSize + ‘px‘ }"></div>

data: {
    activeColor: ‘red‘,
    fontSize: 30
}

<div :style="styleObject"></div>

data = {
    styleObject: {
        color: ‘red‘,
        fontSize: ‘13px‘
    }
}

Style 数组语法

<div :style="[styleObjectA,styleObjectB]"></div>

data = {
    styleObjectA: {
        fontSize: ‘15px‘
    }
}

条件渲染

特别说明: v-else 元素必须立即跟在 v-if 或 v-show 元素的后面——否则它不能被识别。

v-if

<h1 v-if="ok">yes</h1>
<h1 v-else>no</h1>

<template v-if="ok">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>

v-show

不支持 template 元素包裹

<h1 v-show="ok">Hello!</h1>

// 在组件上不能使用 v-else
<custom-component v-show="condition"></custom-component>
<p v-show="!condition">这可能也是一个组件</p>

if 与 show 之间的战争

如果需要频繁切换 v-show 较好,如果在运行时条件不大可能改变 v-if 较好。

列表渲染

<ul id="list">
    <li v-for="item in items">
        {{ item.message }}
    </li>
</ul>

var vm = new Vue({
    el: ‘#list‘,
    data: {
        items: [
            { message: ‘Foo‘ },
            { message: ‘Bar‘}
        ]
    }
}) 

通过$index可以访问索引,且在v-for块内可以访问的到其他属性。

<ul id="list">
    <li v-for="item in items">
        {{ parentMessage }} - {{ $index }} - {{ item.message }}
    </li>
</ul>

var vm = new Vue({
    el: ‘#list‘,
    data: {
        parentMessage: ‘Parent‘,
        items: [
            {message: ‘Foo‘},
            {message: ‘Bar‘}
        ]
    }
})

为索引设置一个别名,且 1.0.17+ 之后可以使用 for of

<div v-for="(key,value) of items">
</div>

// 使用一层 template 包裹
<template v-for="item in items">
    <span>{{ item.id }}</span>
    <span>{{ item.content }}</span>
</template>

对象v-for

<ul id="repeat-object" class="demo">
    <li v-for="value in object">
        {{ $key }} : {{ value }}
    </li>
</ul>

<div>
  <span v-for="n in 10">{{ n }} </span>
</div>

方法与事件处理

<div id="example">
    <button @click="greet">Greet</button>
</div>

let vm = new Vue({
    el: ‘#example‘,
    data: {
        name: ‘Vue.js‘
    },
    methods: {
        greet: function(event) {
            alert(‘hello‘+this.name+‘!‘)
            console.log(event.target.tagName)
        }
    }

})

<div id="example">
    <button :click="say(‘hi‘)">Say Hi</button>
    <button :click="say(‘what‘)">Say What</button>
</div>

new Vue({
    el: ‘#example‘,
    methods: {
        say:  function(msg) {
            alert(msg)
        }
    }
})

事件修饰符

在事件处理器中经常需要调用event.preventDefault 或 event.stopPropagation

// 阻止单击事件冒泡
<a @click.stop="do"></a>

// 提交事件不再重载页面
<a @submit.prevent="submit"></a>

// 修饰符可以串联
<a @click.stop.prevent="do"></a>

// 只有修饰符
<form @submit.prevent></form>

按键修饰符

  • enter
  • tab
  • delete
  • esc
  • space
  • up
  • down
  • left
  • right
<!-- 只有在 keyCode 是 13 时调用 vm.submit() -->
<input v-on:keyup.13="submit">

<!-- 同上 -->
<input v-on:keyup.enter="submit">

<!-- 缩写语法 -->
<input @keyup.enter="submit">

自定义按键别名

// 可以使用 @keyup.f1

Vue.directive(‘on‘).keyCodes.f1 = 112

原文地址:https://www.cnblogs.com/Mr-Tao/p/10326305.html

时间: 2024-09-30 15:01:34

简单易懂的 Vue.js 基础知识 !的相关文章

vue,js基础知识

Vue.js是一套构建用户界面(view)的MVVM框架.Vue.js的核心库只关注视图层,并且非常容易学习,非常容易与其他库或已有的项目整合. 1.1 Vue.js的目的 Vue.js的产生核心是为了解决如下三个问题: 解决数据绑定的问题: Vue.js框架生产的主要目的是为了开发大兴单页面应用(SPA:Single Page Application) Angular.js中对PC端支持的比较良好,但是对移动端支持就一般.而Vue.js主要支持移动端,也支持PC端. 3. 它还支持组件化.也就

vue.js基础知识篇(2):指令详解

第三章:指令 1.语法 指令以v-打头,它的值限定为绑定表达式,它负责的是按照表达式的值应用某些行为到DOM上. 内部指令有v-show,v-else,v-model,v-repeat,v-for,v-text,v-el,v-html,v-on,v-bind,v-ref,v-pre,v-cloak,v-if. 2.内部指令 (1)控制元素的显示与否:v-if,v-show.v-else v-if是真实的条件渲染,根据表达式的true/false在DOM中生成或移除一个元素. 第一,这个指令是惰性

vue.js基础知识篇(4):过滤器、class与style的绑定2

代码下载:网盘 欢迎私信 第一章:过滤器 过滤器是对数据进行处理并返回结果的函数. 1.语法 语法是使用管道符"|"进行连接.过滤器可以接收参数,跟在过滤器后面,带引号的参数被当做字符串处理,不带引号的参数被当做数据属性名处理. {{message | filterFunction "arg1" arg2 }} vue.js支持在任何出现表达式的地方添加过滤器. vue.js支持链式调用,上一个过滤器的输出结果作为下一个过滤器的输入.类似于Linux shell的管

vue.js基础知识篇(5):过渡、Method和Vue实例方法

第8章:过渡 1.CSS过渡 2.JavaScript过渡 3.渐进过渡 第9章:method Vue.js的事件一般通过v-on指令配置在HTML中,虽然也可以在js的代码中使用原生的addEventListener方法添加事件监听,但并不推荐,因为它并不符合"关注点分离"的设计理念. 使用v-on指令有几点好处: 通过HTML模板(视图)就能看到js对应的方法;无需手动绑定事件,ViewModel和DOM完全解耦.易于测试;当一个ViewModel被销毁时,所有的事件处理器都会被自

vue.js基础知识篇(6):组件详解

第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 Vue.js的组件注册分为全局注册和局部注册. 全局注册使用Vue.component方法.第一个参数是组件名字,第二个参数是组件的构造函数,要么是function,要么是object. <!DOCTYPE html> <html lang="en"> <hea

vue.js基础知识篇(3):计算属性、表单控件绑定

第四章:计算属性 为了避免过多的逻辑造成模板的臃肿不堪,可使用计算属性来简化逻辑. 1.什么是计算属性 <!DOCTYPE html> <html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <div id="example"> <

vue.js基础知识篇(8):与服务端通信

vue.js可以构建一个完全不依赖后端服务的应用APP,同时也可以与服务端进行数据交互来同步界面的动态更新.vue-resource实现了基于AJAX.JSONP等技术的服务端通信. 第十三章:与服务端通信 1.安装和配置vue-resource 安装方法:使用script标签引入. (1)参数配置.分为全局配置.组件实例配置和调用配置3部分,其优先级依次增高. 第一,全局配置. (2)headers配置 XXX 2.基本HTTP调用 (1)底层方法 (2)便捷方法 (3)请求选项对象 (4)r

vue.js基础知识篇(1):简介、数据绑定、指令、计算属性、表单控件绑定和过滤器

目录第一章:vue.js是什么? 代码链接: http://pan.baidu.com/s/1qXCfzRI 密码: 5j79 第一章:vue.js是什么? 1.vue.js是MVVM框架 MVVM的代表框架是Angular.js,以及vue.js. MVVM的view和model是分离的,View的变化会自动更新到ViewModel上,ViewModel的变化会自动同步到View上显示.这种自动同步依赖于ViewModel的属性实现了Observer. 2.它与angular.js的区别 相同

vue.js基础知识总结

初始化一个项目 npm init -y 安装一些依赖 npm install 名称 --save 例如 npm install vue axios bootstrap --save --save 表示开发和上线都要用 --save dev 表示开始时候用,上线丢掉 vue总结 1.指令 v-show 切换显示隐藏,频繁显示使用 v-if 根据条件语句可以显示隐藏,不频繁显示隐藏使用 v-else 前面有v-if 配合使用,如果前面v-if不成立情况下 v-model 双向数据绑定的关键所在,视图