vue

  • 尤雨溪 华裔 Google 工程师
  • 遵循 MVVM 模式
  • 编码简洁,体积小,运行效率高,适合 移动 / PC 端 开发
  • 动态构建用户界面: 异步获取后台数据,展现到页面
  • 渐进式 js 框架

渐进式: 核心库开始项目,需求引入插件

发展 

借鉴了 angular 的 模板语法 和 数据绑定技术

借鉴了 react 的 组件化 和 虚拟 DOM 技术

vue 扩展插件

vue-cli ---- 脚手架 command line interface

vue-resource/axios ---- ajax 请求

vue-router ---- 路由

vuex --- 状态管理

vue-lazyload ---- 图片懒加载

vue-scroller ---- 页面滑动相关

mint-ui ---- 基于 vue 的 UI 组件库 (移动端) ---- 饿了么

element-ui ---- 基于 vue 的 UI 组件库 (PC 端) ---- 饿了么

简单实用 ---- 动态显示数据 ---- 双向数据绑定 -------- data 普通属性、computed 计算属性(有缓存,多次读取,只计算一次)、watch 监视属性

<div id="test">

// <标签 v-model="模板变量"> -------- v-指令 ---- 指令: vue 自定义的标签修饰属性

<input type="text" v-model="myVueData" />

// {{模板变量}} -------- 插值 ------- 模板变量就是 js 表达式,注意: 不可加分号, 且只能写在标签体中

<p>{{myVueData}}</p>

<p>{{myVueData.toUpperCase()}}</p>

// v-bind 强制数据绑定 ---- M->V ---- 得到一个动态的属性值

<a v-bind:href="myUrl">百度</a><br />

<a :href="myUrl">简写 - 百度</a>

// v-on:事件名="method函数名"

<button v-on:click="myConsole">打印</button>

<p @click="myConsole">简写 - 打印</p>

// 双向数据绑定

请输入新姓名: <input type="text" v-model="myVueData"/>

请输入新网址: <input type="text" v-model="myUrl"/>

result: <input type="text" v-model="myUnionStr"/>

</div>

<p>----------------------- 模板中关联的 变量/函数 都是 viewModel 对象的方法 ---------------</p>

<script src="./js/vue.js"></script>

<script>

new Vue({

el:"#test",

data() {

    return{    // vue 会将 给 vm 添加所有 data 中的属性及其属性值

myVueData: "kjf",

myUrl: "https://www.baidu.com"

}

},

computed: {    // 双向数据绑定:初始显示、先关的状态数据 发生变化

    // 避免重复计算,提高效率 -------- 计算属性是有缓存的,除了第一次获取数据,以后读取直接从缓存中取得数据

unionStr(){    // 默认 getter

return this.myVueData+myUrl

}

myUnionStr: {

get(){

return this.myVueData+"-"+myUrl

}

set(newValue){

let names = newValue.split("-");

this.myVueData = name[0]

this.myUrl = names[1]

}

}

}

watch: {    // 单向数据绑定

myVueData(newValue){

this.myUnionStr = newValue + 

}

}

methods: {    // vue 也会添加 所有 methods 中的方法

myConsole(){

console.log("myConsole: 所有 vue 相关的方法中的 this 都是 vm");

console.log("组件数据的常规访问: this._data.myVueData = "+this._data.myVueData);

console.log("组件的数据代理 - 简化状态读写: this.myVueData = "+this.myVueData);

}

}

});

vm.$watch("myUrl", function(newValue){    // API 写法,单项数据绑定,数据的监视,及其响应

this.myUnionStr = this.myVueData + "-" + newValue;

});     // -------- 目前的这种数据监视,只是监视一般类型的数据有效,如果是数组或者对象,则需要进行深度监视

</script>

 vue 的 核心语法 Object.defineProperty(

vue 内置指令 - 操作指定的标签

<p v-html="content">原理: p.innerHTML=content</p>

------------------------------------------------------------------

<p v-text="content">原理: p.textContent=content</p>

------------------------------------------------------------------

<p ref="myName">kjf</p>

<button @click="showMyName">点击</button>

********* js *********

methods: {

showMyName(){

alert(this.refs.myName.textContent);

}

}

自定义 指令 directive  - 复用,简化编码,功能扩展

<p v-upper-text>全局注册自定义指令</p>

<p v-lower-text>局部注册自定义指令</p>

********* js *********

Vue.directive("upper-text", function(el, binding){

el.innerHTML = bindinf.value.toUpperCase()

});

new Vue({

el: "test",

directive:{

"lower-text": function(){

el.innerHTML = bindinf.value.toLowerCase()

}

}

})

自定义插件

vue-my-plugin.js 匿名函数自调用 IIFE ----------------------------------------------

(function(){

const MyPlugin = {}

// 必须有 install 方法,不由我们直接调用

MyPlugin.install = function(){

// 我的全局方法

Vue.myGolbalFunc(){

console.log("我的全局方法")

}

// 我的全局指令

Vue.directive("my-d", function(el, binding){

console.log("我的指令");

})

// 我的混合 mixins

// 我的 vm 实例方法

Vue.prototype.$haha = function(){

console.log("我的实例方法: 哈哈");

}

}

window.MyPlugin = MyPlugin;        // 向外暴露

})()

-----------------------------------------------------------------------------------------

<script src="./js/vue-my-plufin.js"></script>

<script>

Vue.use(MyPlugin);        // 声明使用 vue 插件,内部会自调用 MyPlugin.install(Vue);

</script>

vue_简介_渐进式 js 框架_内置指令_自定义指令_自定义插件的更多相关文章

  1. JS中的内置对象简介与简单的属性方法

    JS中的数组: 1.数组的概念: 数组是在内存中连续存储的多个有序元素的结构,元素的顺序称为下标,通过下标查找对应元素 2.数组的声明: ①通过字面量声明var arr1 = [,,,,] JS中同一 ...

  2. 注解_概念和注解_JDK内置注解

    注解: 概念:说明程序的,给计算机看的 注解:用文字描述程序的,给程序员看的 定义:注解(Annotation),也叫元数据.一种代码级别的说明.他是JDK1.5及以后的版本引入的一个特性,与类,接口 ...

  3. 框架----Django内置Admin

    Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttyp ...

  4. JS数组及内置对象

    [JS中的数组]1.数组的概念:数组是在内存中连续存储多个有序元素的结构元素的顺序,称为下标,通过下标查找对应元素.2.数组的声明: ① 字面量声明: var arr1 = [];JS中同一数组,可以 ...

  5. js数组、内置对象、自定义对象

    [js中的数组] 1.数组的基本概念? 数组是在内存空间中连续存储的一组有序数据的集合 元素在数组中的顺序,称为下标.可以使用下表访问数字的每个元素. 2.如何声明一个数组? ① 使用字面量声明: 在 ...

  6. js中的内置对象(还没怎么看)

         在js里,一切皆为或者皆可以被用作对象.可通过new一个对象或者直接以字面量形式创建变量(如var i="aaa"),所有变量都有对象的性质.注意:通过字面量创建的对象在 ...

  7. js中的内置对象

    在js里,一切皆为或者皆可以被用作对象.可通过new一个对象或者直接以字面量形式创建变量(如var i="aaa"),所有变量都有对象的性质.注意:通过字面量创建的对象在调用属性和 ...

  8. JS基础语法---内置对象

    js学习中三种对象: 内置对象----js系统自带的对象 自定义对象---自己定义的构造函数创建的对象 浏览器对象---BOM的时候讲 内置对象: Math Date String Array Obj ...

  9. JS高级---为内置对象添加原型方法

    为内置对象添加原型方法 我们能否为系统的对象的原型中添加方法, 相当于在改变源码   我希望字符串中有一个倒序字符串的方法 //我希望字符串中有一个倒序字符串的方法 String.prototype. ...

随机推荐

  1. EF CodeFirst系列(5)---FluentApi

    FluentApi总结 1.FluentApi简介 EF中的FluentApi作用是通过配置领域类来覆盖默认的约定.在EF中,我们通过DbModelBuilder类来使用FluentApi,它的功能比 ...

  2. 高并发秒杀系统--Service接口设计与实现

    [DAO编写之后的总结] DAO层    -->    接口设计 + SQL编写 DAO拼接等逻辑    -->    统一在Service层完成 [Service层的接口设计] 1.接口 ...

  3. python3 使用pip安装(命令行中)失败或 “not a supported wheel” 解决方案!

    原因1: 安装的不是对应python版本的库,下载的库名中cp36代表python3.6,其它同理. 原因2:(我遇到的情况----下载的是对应版本的库,然后仍然提示不支持当前平台) 百度了一下,说法 ...

  4. undefined reference to symbol 'pthread_create@@GLIBC_2.2.5' 的修改方法

    在编译DSO代码的时候会如下这样的问题: 检查DSO,在程序中没有用到pthread,但是在编译的时候却出现此类问题.仔细想了想了一下,在程序中用到了C++11中的线程std::thread,个人猜测 ...

  5. fiddler启用过滤规则只显示想要的接口数据

    fiddler启用过滤规则只显示想要的接口数据 比如只显示192.168.11.80站点数据 点击应用规则就可以只显示192.168.11.80了

  6. Scrapyd

    scrapyd 安装 scrapyd-中心节点,子节点安装scrapyd-clientpip3 install scrapydpip3 install scrapyd-client scrapyd-c ...

  7. Flask开发微电影网站(六)

    1. 后台管理登录功能实现 1.1 后台管理页面登录表单LoginForm 在app的admin目录下创建forms.py文件,用来保存admin蓝图中需要使用到的表单 from flask_wtf ...

  8. yum [Errno 256] No more mirrors to try 解决方法

    [root@localhost yum]# yum update Loaded plugins: fastestmirror, refresh-packagekit, security Reposit ...

  9. java 获取用户ip

    JSP里,获取客户端的IP地址的方法是: request.getRemoteAddr() 这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  10. 集腋成裘-08-ECharts -简介-01

    目标:让数据说话. 大数据时代的到来以及有效应用,大幅度提升了企业的管理能力.决策科学化与可执行性水平,推动传统决策方式朝着数据驱动转型.可视化数据分析对决策者产生的意义将在事前预测.事中感知以及事后 ...