Ming YIN
Crazy Monster!
@kalasoo
Ming Yin
稀土创始人 🙄
前端工程师 🐶
九流设计师 🙀
ming@xitu.io
@kalasoo
Reactive Components for Modern Web Interfaces
数据驱动的组件,为现代化的 Web 界面而生
最新版本是 2.0
尤小右 Evan You
@youyuxi
多说 / Google / Meteor
发布于 2014 年 2 月
http://xitu.github.io/coder-price/
Model / View / ViewModel
UI = VM(State)
<div id="demo">
<p>{{message ? message : "no content"}}</p>
<input v-model="message">
</div>
var demo = new Vue({
el: '#demo',
data: {
message: '喜欢前端技术,竟然不上掘金?'
}
})
CodePen 加载中
// Object.defineProperty
// getter / setter / watcher object
var a = {}
Object.defineProperty(a, 'b', {
enumerable: false,
value: "static",
get: () => { ... },
set: () => { ... }
})
选择一个框架就像是选择一个老婆
错了是一辈子的事情!➡️ 微信小程序
Google,Facebook,Airbnb,
掘金,阿里巴巴,百度,饿了么,58
超过11万次NPM下载/月
这是你搞不定的
一大堆东西
这是你搞得定的一堆小东西
和你能搞得定的一个关系网
// comment.vue
<style lang="sass">
button {
border: 1px solid gray;
&.blue { border-color: blue; }
}
</style>
<template lang="jade">
avatar(:user='user')
input(type='text', v-model='content')
button.blue(@click='submitComment')
</template>
<script>
import Comment from '../models'
import avatar from './components/avatar.vue'
export default {
props: ['user'],
components: {
avatar
},
data () {
return {
content: ''
}
},
methods: {
submitComment (e) {
e.preventDefault();
var comment = new Comment(this.content)
comment.save().then(() => {
alert('评论成功')
this.content = ''
})
}
}
}
</script>
✌
.vue: 一个文件来管理一个组件
一个基于 Vue.js 的 State Management 工具
管理那些应用级的共享数据
http://rc.vuejs.org/
<li v-for="item in items" :key="item.id">{{ item.text }}</li>
<button @click="sayHi">Click Me!</button>
<button v-on:click.prevent="sayHi">Click Me!</button>
<button v-if="iLoveYou">Show 🎁</button>
<button v-else>🙄️</button>
<Component v-bind:user="ym"></Component>
<button v-if="iLoveYou">Show 🎁</button>
<button v-else>🙄️</button>
<div v-bind:class="[activeClass, errorClass]">
<div v-bind:style="styleObject"></div>
<input
type="checkbox"
v-model="toggle"
v-bind:true-value="a"
v-bind:false-value="b">
<!-- synced after "change" not "input" -->
<input v-model.lazy="msg" >
<input v-model.number="age" type="number">
<input v-model.trim="msg">
// Vue.transition stagger
// ready, activate, beforeCompile, compiled, attached, detached
// v-for $index, $key
(value, index) in arr; (value, key, index) in obj;
// vm.$dispatch, vm.$broadcast
// .once, .sync => props are only one-way down
computedProperties > watcher
// filter only in {{}}
... ...
语法更加简单,直白
render function 官方建议全套使用 JS 生成 HTML/DOM
Server-side Render
vue-server-renderer
Streaming
Component Caching
// Step 1: Create a Vue instance
var Vue = require('vue')
var app = new Vue({
render: function (h) {
return h('p', 'hello world')
}
})
// Step 2: Create a renderer
var renderer = require('vue-server-renderer').createRenderer()
// Step 3: Render the Vue instance to HTML
renderer.renderToString(app, function (error, html) {
if (error) throw error
console.log(html)
// => <p server-rendered="true">hello world</p>
})
🔥 Thanks for your time 🔥
🔞 ming@xitu.io 🔞
By Ming YIN
稀土 Meetup X Coding 线下分享