前 言缓存
灵活
不断繁荣的生态系统,能够在一个库和一套完整框架之间自如伸缩。app
高效
20kB min+gzip 运行大小
超快虚拟 DOM
最省心的优化框架
1 计算属性 |
计算属性关键词: computed。函数
计算属性在处理一些复杂逻辑时是颇有用的。优化
<div id="app"> <p>原始字符串: {{ message }}</p> <p>计算后反转字符串: {{ reversedMessage }}</p> </div>
如下是js代码:this
var vm = new Vue({ el: '#app', data: { message: 'Runoob!' }, computed: { // 计算属性的 getter reversedMessage: function () { // `this` 指向 vm 实例 return this.message.split('').reverse().join('') } } })
运行结果:google
原始字符串: Runoob!url
计算后反转字符串: !boonuRspa
咱们可使用 methods 来替代 computed,效果上两个都是同样的,可是 computed 是基于它的依赖缓存,只有相关依赖发生改变时才会从新取值。而使用 methods ,在从新渲染的时候,函数总会从新调用执行。code
methods: { reversedMessage2: function () { return this.message.split('').reverse().join('') } }
区别:
[methods和computed]
有methods和computed两种方式来动态看成方法来用的
一、写法上的区别是computed计算属性的方式在用属性时不用加(),而methods方式在使用时
要像方法同样去用,必须加();
二、利用computed计算属性是将 content与message绑定,只有当message发生变化时才会触发content,
而methods方式是每次进入页面都要执行该方法,可是在利用实时信息时,好比显示当前进入页面的时间,
必须用methods方式。
若是用computed计算属性的话,每次进入页面将一直沿用第一次的信息,不会再触发now。
computed 属性默认只有 getter ,不过在须要时你也能够提供一个 setter :
var vm = new Vue({ el: '#app', data: { name: 'Google', url: 'http://www.google.com' }, computed: { site: { // getter get: function () { return this.name + ' ' + this.url }, // setter set: function (newValue) { var names = newValue.split(' ') this.name = names[0] this.url = names[names.length - 1] } } } }) // 调用 setter, vm.name 和 vm.url 也会被对应更新 vm.site = '菜鸟教程 http://www.runoob.com'; document.write('name: ' + vm.name); document.write('<br>'); document.write('url: ' + vm.url);
2 组件 |
组件(Component)是 Vue.js 最强大的功能之一。
组件能够扩展 HTML 元素,封装可重用的代码。
组件系统让咱们能够用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面均可以抽象为一个组件树。
全部实例都能用全局组件。
注册一个简单的全局组件 runoob,并使用它:
<div id="app"> <runoob></runoob> </div> <script> // 注册 Vue.component('runoob', { template: '<h1>自定义组件!</h1>' }) // 建立根实例 new Vue({ el: '#app' }) </script>
咱们也能够在实例选项中注册局部组件,这样组件只能在这个实例中使用:
注册一个简单的局部组件 runoob,并使用它:
<div id="app"> <runoob></runoob> </div> <script> var Child = { template: '<h1>自定义组件!</h1>' } // 建立根实例 new Vue({ el: '#app', components: { // <runoob> 将只在父模板可用 'runoob': Child } }) </script>
prop 是父组件用来传递数据的一个自定义属性。
父组件的数据须要经过 props 把数据传给子组件,子组件须要显式地用 props 选项声明 "prop":
<div id="app"> <child message="hello!"></child> </div> <script> // 注册 Vue.component('child', { // 声明 props props: ['message'], // 一样也能够在 vm 实例中像 "this.message" 这样使用 template: '<span>{{ message }}</span>' }) // 建立根实例 new Vue({ el: '#app' }) </script>