Lambda博客
  • 自我介绍
  • SSR
    • 浅谈SSR
  • React
    • 页面路由——React-Router
    • 管好你的状态——React-Redux
    • 一个哪行——React详解
    • 左膀右臂一个不少——React初探
  • 问题记录
    • js-xlsx实现纯前端导出excel表格
    • 前端开发需要了解的东西
    • 打造高性能网站
  • JavaScript学习笔记
    • 语法和API
    • js-垃圾回收
    • 收集的JS使用技巧
    • 执行机制
    • 原型和原型链
    • 执行上下文
    • 事件循环
    • JavaScript手写代码
    • 43道JS面试题
    • 悄悄的带走了你的东西——闭包详解
    • 你是个富二代吗?——JavaScript作用域链
    • 捉摸不透的女生——JavaScript类型转换
    • 这是你的女神!——JavaScript
  • 网络学习笔记
    • 强不强——HTTP-协商缓存VS强缓存
    • 网络缓存
    • 我要飞的更高——计算机网络
    • 快点!再快点!——CDN
    • 喜怒哀乐多状态——HTTP状态码
    • 你会爱上我的(ಥ_ಥ) ——TCP详解
    • 隔壁老王想篡位?门都没有——同源策略
  • 软技能
  • 安全专题
    • 保护好自己——网站安全,预防
  • 浏览器兼容性
    • 我是个好人——浏览器兼容性
  • 多图片加载——懒加载详解
  • 数据结构
  • Node
    • Node初探
  • Typescript
    • JS Plus 真香——初探 TypeScript
  • 设计模式
    • 不要花里胡哨,要一套一套——设计模式(1)
    • 学会“套路”——设计模式(2)
  • Vue
    • 实操实干——vue实例记录
    • 停下来,问问自己——Vue-刨根问底
    • 你有喘息的机会吗?——Vue,逐步了解
    • 你累吗?来来来,安利框架——Vue-初次见面
  • 小程序
    • 今天天气怎么样——记一次小程序开发
  • Webpack
    • 蛋糕分割整合工具——Webpack-前端工程化
  • 你一块,我一块——Web-modules 前端模块化
  • HTML5
    • 你会画小猪佩奇吗?—— canvas
    • 画个矢量图——HTML5-SVG
    • 听说你爱闹腾——HTML5-多媒体
    • 动画神器——HTML5-requestAnimationFrame
    • 留下痕迹——HTML5-客户端存储
    • 你知道指北针吗?——HTML5-DeviceMotionEvent
    • 你在哪啊?我在这啊——HTML5-Geolocation
    • 你到这,你到那——HTML5-拖拽
    • 你从这,到那——HTML5-拖拽上传文件
    • 开启前端之路——HTML 标签
  • 瀑布流(无限滚动)
  • 我是怎么来的?——浏览器渲染原理
  • Css
    • 由大变小,你行吗 —— 移动端
    • 动起来,这样比较炫—— CSS3 动画
    • 请不要拐弯抹角 —— CSS3 选择器
    • 想炫吗?—— CSS3 属性
    • 最后的最后——CSS自问自答
    • 万事开头难?——深入学习前端常见布局
    • 一入前端深似海——BFC剖析
    • 还有哪些好玩的东西——CSS提升
    • 那些好看的页面是怎么形成的——CSS 初识
  • 拿个小本本记下——Cookie
由 GitBook 提供支持
在本页
  • 声明式渲染
  • 三大模板
  • 组件基础
  • 组件注册
  • Prop
在GitHub上编辑
  1. Vue

你有喘息的机会吗?——Vue,逐步了解

声明式渲染

  • 命令式编程:命令”机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现

  • 声明式编程:告诉”机器”你想要的是什么(what),让机器想出如何去做(how)

三大模板

html 模板

v-html=”标签”

字符串模板

template:”

hello world

“ 使用模板字符串拼接

<script type="x/template" id="demo">
  <div>
      hello world{{id}}
  </div>
</script>
var vm = new Vue({
    template: "#demo"
})

render 函数(效率更高)

var vm = new Vue = ({
    render(createElement){
        var dom = createElement("div",{
            attrs:{
                // 添加属性
                id:"demo"
            },
            class:{
                // 添加class
                vue1:true,
                vue2:false
            },
            domPros:{
                // 会覆盖子元素
                innerHTML:"<div>HTML</div>"
            }
        },["hello",createElement("p",["world"])]);
        // 渲染dom
        return dom
    }
})

组件基础

基本实例

//定义一个名为button-counter的新组件
Vue.component('button-counter',{
    data:function(){
        return {
            count : 0
        }
    }
    template:'<button v-on:click="count++">clicked me {{count}} +1</button>'
})

组件是可复用的 Vue 实例,且带有一个名字。我们可以在一个通过new Vue创建的 Vue 根实例中,把这个组件作为自定义元素来使用。

<div id="demo">
  <button-counter></button-counter>
</div>
new Vue({
  el: '#demo'
})

组件的复用

可以将组件进行任意次数的复用

  • data

    必须是一个函数

    • 在定义组件时,data并不是像之前提供一个对象

    • 一个组件的data选项必须是一个函数,每个实例维护一份被返回对象的独立的拷贝

通过Prop向子组件传递数据

Prop是你可以在组件上注册的一些自定义特性。当一个值传递给一个prop特性的时候,他就变成了那个组件实例的一个属性。我们可以用一个props选项将其包含在该组件可接受的prop列表中。

Vue.component('blog-post',{
    props:['title],
    template:'<h3>{{title}}</h3>
})

组件注册

组件名

在注册一个组件的时候,我们始终需要给它一个名字。

Vue.component('my-component-name', {
  // template: "<div>我是一个组件</div>",
  // template:`<div>我是一个组件  </div>`
})

该组件名就是Vue.component的第一个参数(推荐字母全小写且必须包含一个连字符)

全局注册

只使用Vue.component来创建组件。这些组件是全局注册的。在它们注册后可以用在任何新创建的 Vue 根实例(new Vue)的模板中。在组件内部也可以相互使用。

局部注册

全局注册往往是不够理想的。全局注册所有的组件意味着即便你已经不再使用一个组件了,它仍然会包含在最终的构建结果中。这造成用户下载的 JavaScript 的无谓的增加。

可以通过普通的 JavaScript 对象来定义组件。

var ComponentA = {
  template:`<div>我是局部组件</div>`
};
var ComponentB = {
  /* ... */
};
new Vue({
  el:"#demo,
  components:{
    "component":{
      template:`<div>我是局部组件</div>`
    }
  }
})

然后在 components 选项中定义你想要使用的组件:

new Vue({
  el: '#app',
  components: {
    'component-a': ComponentA,
    'component-b': ComponentB
  }
})

Prop

Prop 的大小写

HTML 中的特性名是大小写不敏感的,所以浏览器会把所有的大写字符解释为小写字符。这意味着在使用 DOM 中的模板时,camelCase 的 prop 名需要使用其等价的 kebab-case 命名。

Prop 类型

props: ['title', 'likes', 'isPublished', 'commentIds', 'author']

如果希望每个 prop 都有指定的值类型,可以用对象的形式列出 prop。

props: {
  title: {
    // 类型
    type:String,
    // 默认值
    default:"hello",
    // 是否必填
    required:true
  },
  likes: {
    //多个可能的类型
    type:[String,Number]
  },
  isPublished: Boolean,
  commentIds: Array,
  author: Object,
  callback: Function,
  contactsPromise: Promise // or any other constructor
}

传递静态或动态的 Prop

可以给 prop 传入一个静态的值,也可以通过v-bind动态赋值

<!-- 静态 -->
<blog-post title="My journey with Vue"></blog-post>
<!-- 动态 -->
<blog-post v-bind:title="post.title"></blog-post>
上一页停下来,问问自己——Vue-刨根问底下一页你累吗?来来来,安利框架——Vue-初次见面

最后更新于3年前