VUE复习笔记2(介绍)

什么是vuejs

Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

如果你已经是有经验的前端开发者,想知道 Vue 与其它库/框架有哪些区别,请查看对比其它框架

起步

尝试 Vue.js 最简单的方法是使用 JSFiddle 上的 Hello World 例子。你可以在浏览器新标签页中打开它,跟着例子学习一些基础用法。或者你也可以创建一个 .html 文件,然后通过如下方式引入 Vue:

<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

声明式渲染

vuejs的核心是使用简洁的模板语法声明式的将数据渲染进dom中。

<div id="app">
  {{ message }}
</div>

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

{{message}}渲染得到结果 hello vue
我们可以通过 app.message读取message的值
也可以通过 app.message='hello world'修改他的值

除了以上的文本插值方式,我们还可以绑定元素的特性。

<div id="app-2">
  <span v-bind:title="message">
    鼠标悬停几秒钟查看此处动态绑定的提示信息!
  </span>
</div>

var app2 = new Vue({
  el: '#app-2',
  data: {
    message: '页面加载于 ' + new Date().toLocaleString()
  }
})

以上代码在app2中的span中,绑定了 title 功能,鼠标上移,显示相关信息。

这里我们遇到了一点新东西。你看到的 v-bind: 特性被称为指令。指令都是带有 v- 前缀的,来表示这是 vue提供的特性。简写为 : ,他会在渲染 dom 的时候应用特殊的响应式行为。
例如:

v-bind:title="鼠标悬停显示"  //常规
:title="鼠标悬停显示"  //简写

条件与循环

条件:v-if

vue中控制一个元素的显示和隐藏也非常简单。

<div id="app-3">
  <p v-if="seen">现在你看到我了</p>
</div>

var app3 = new Vue({
  el: '#app-3',
  data: {
    seen: true
  }
})

在 v-if 中绑定了一个 seen 的值,当seen===true,就显示节点,false则隐藏。
这个例子展示我们不仅可以渲染数据到dom上,还可以操作他的结构。
如果 js中设置 app3.seen=false,节点就会 被去掉。
通常 v-if 都会被用在 tab 切换上面。

循环:v-for

v-for 指令可以绑定数组的数据来渲染一个项目列表:

<div id="app-4">
  <ol>
    <li v-for="(todo,index) in todos" :key="idx">
      {{ todo.text }}
    </li>
  </ol>
</div>

var app4 = new Vue({
  el: '#app-4',
  data: {
    todos: [
      { text: '学习 JavaScript' },
      { text: '学习 Vue' },
      { text: '整个牛项目' }
    ]
  }
})

其中 v-for属性中的 todo 代表 todos 这个数组中的每一个项,即 {text:"学习javascript"}等这三个的循环。
如果需要在列表中新增一个text和内容,如下:app4.todos.push({ text: '新项目' })
使用数组的js操作删增即可。

注意:一般使用 v-for 的同时,都需要添加 key属性,否则会出现警告,key如果在数组中没有id,可以使用index

处理用户输入

当用户与应用交互的时候,使用 v-on:事件可以添加一个事件监听器,简写为@事件
例如:

v-on:click="handleclick()"  //常规
@click="handleclick()"  //简写
<div id="app-5">
  <p>{{ message }}</p>
  <button v-on:click="reverseMessage">逆转消息</button>
</div>

var app5 = new Vue({
  el: '#app-5',
  data: {
    message: 'Hello Vue.js!'
  },
  methods: {
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
  }
})

这里是在 button 点击的时候 执行 reserseMessage方法。
方法则写在,vue中的methods中。

reserseMessage方法中我们更新了引用,但是没有操作dom,因为所有的dom都会由 vue 自动来处理。

Vue还提供了 v-model 指令,可以轻松的实现表单和应用的双向绑定。

<div id="app-6">
  <p>{{ message }}</p>
  <input v-model="message">
</div>

var app6 = new Vue({
  el: '#app-6',
  data: {
    message: 'Hello Vue!'
  }
})

当我们在 input 中输入删除的时候, p标签中的 message也会实时的输入和删除。

组件化的应用和构建

组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用

在 Vue 里,一个组件本质上是一个拥有预定义选项的一个 Vue 实例。

// 定义名为 todo-item 的新组件
Vue.component('todo-item', {
  template: '<li>这是个待办项</li>'
})
现在你可以用它构建另一个组件模板:

<ol>
  <!-- 创建一个 todo-item 组件的实例 -->
  <todo-item></todo-item>
</ol>

自定义组件都是在vue中的 components中描述的,一般如下
①在新建的vue文件中写一个组件
②在需要组件的页面中引入该组件,import ...
③在components中注册自定义组件使用。这里的components中是使用了es6的语法。

components:{
  vueCropper:vueCropper  //属性为自定义的组件名字,值是import引用组件的变量。
//组件的使用:<vueCropper></vueCropper>
}

components:{
  yes:vueCropper  
  //如果这样写,那么组件使用的时候就是 <yes></yes>
}

但是一般都是选择 es6的简写方式,等同于 案例1


image.png

如果我们在一个div中引入 2个 <todo-item></todo-item>,那他就会渲染2次相同的文本内容,这并不是我们想要的,因为常常都是相同的模块里面内容是不同的。

<ol>
  <todo-item></todo-item>
  <todo-item></todo-item>
</ol>

解决方法,我们可以在组件中,接收一个 props

父组件//
<template>
  <tips :msg="tipsmsg" ></tips>
  <tips :msg="tipsmsg2" ></tips>
</template>

<script>
    import tips from '../components/tips/tips';
    export default{
        data(){
              return{
                    tipsmsg:' '
              }
        },
        components:{
            tips
        }
  }
</script>


子组件//
<template>
    <div :class="['tips',{'tipsoff':tipsoff}]">
        <p class="p1">{{msg}}</p>
    </div>
</template>

<script>
    export default{
        props:['msg','msgshow'],
        data(){
            return{
                tipsoff:true
            }
        },
        created(){
            setTimeout(()=> {
                this.tipsoff=false
            }, 3000);
        }
    }
</script>

①首先父组件中引用<tips :msg="tipsmsg" ></tips>,
绑定属性msg,然后tipsmsg是需要传给msg的内容,在data中定义,可以后续修改。
②子组件中定义props:['msg'],接收msg,这时候拿到的msg是父组件中的msg传过来的值,也就是把tipsmsg赋给了msg再传给子组件,这样 子组件就能获取父组件的内容或者状态了。
③如下子组件中包含的{{msg}}就是props中获取的msg

    <div :class="['tips',{'tipsoff':tipsoff}]">
        <p class="p1">{{msg}}</p>
    </div>

④当父组件传不同的值时,相应的子组件也会显示不同的内容。

<template>
  <tips :msg="tipsmsg" ></tips>
  <tips :msg="tipsmsg2" ></tips>
</template>

⑤同样的,我们获取到了父组件的msg,也能通过msg的不同,来改变子组件的状态。

这只是组件的vue内容的一小部分。
其余部分请见后面的笔记。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,046评论 0 29
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,204评论 0 6
  • 组件(Component)是Vue.js最核心的功能,也是整个架构设计最精彩的地方,当然也是最难掌握的。...
    六个周阅读 5,587评论 0 32
  • 喜欢你春风轻柔的呼吸 喜欢你夜空深藏的眼睛 喜欢你风铃摇曳的声音 我喜欢你的一切 很深切
    何处会有撑伞人阅读 223评论 0 2
  • 你喜欢一个人独处, 她喜欢一群人喧嚣。 你喜欢含蓄表达, 她喜欢一吐为快。 你喜欢歇息, 她喜欢运动。 然后, 她...
    小剧在成长阅读 141评论 3 11