Vue学习所得小结(一)

一、理解MVC和MVVM的关系:

MVC:Model View Controller (模型 视图 控制器)

  分别为:业务逻辑、界面、用来调度View和Model层

MVVM:Model View ViewModel

    M:每个页面中单独的数据;

    V:每个页面中的HTML机构;

    VM:调度者,V从VM中获取数据,实现数据的双向绑定!

二、VUE代码实现MVVM:

前期为了理解VUE.JS,先采用引入的方式进行VUE的操作:

三、部分vue指令:

1、v-cloak:能解决插值表达式{{  }} 闪烁的问题,只会替代自己的占位符,不会把整个元素的内容清空;

2、v-text:默认没有删除问题的,但是会覆盖元素中原本的内容;

3、v-html:可以解析成HTML;

4、v-bind:是vue中,提供的用于(单向)绑定属性的指令,里面可以写合法的JS表达式,简写为:   ;

5、v-on:事件绑定机制(可以绑定像点击事件一样);

6、v-if:元素是否移除或者插入(根据表达式的真假判断);

7、v-show:元素是否显示或者隐藏;

8、methods:定义了当前vue实例所有可用的方法:

  (在定义的vue实例中,若要调用methods中的方法或要获取data上数据,需要this代表实例对象,实例会监听data中所有数据上的改变,只要一变化,就会自动把最新的数据,从data上同步到页面中去。这样程序员只需要关心数据,不需要考虑如同重新渲染DOM)

     var_this =this  (代表最初的对象)

  ES6:  箭头函数=> 表示其内部的this永远和外部的this保持一致。

9、事件修饰符:

stop:阻止冒泡;

prevent:阻止默认行为;

capture:添加事件侦听器时使用事件捕获模式;

self:只当事件在该元素本身(比如不是子元素)触发时触发回调;

once:事件只触发一次。

10、v-model:双向数据绑定(在表单元素中用如:input\select\checkbox)

四、vue中通过属性绑定为元素设置class类样式和style行内样式:

1、class样式:

①:数组样式;

②、三元表达式;

③、数组中嵌套对象;

④、直接使用对象;

2、style行内样式:

①、直接在元素上通过:style的形式,书写对象;

②、将样式对象,定义到data中,并直接引到:style中;

③、在;style中通过数组,引用多个data上的样式对象。

五、v-for:

1、v-for遍历,操作数组、对象;

<p v-for="count in 10">第 {{ count }} 循环 </p>
<p v-for="(val,key,i) in user">值是:{{ val }}--键是:{{ key }}--索引: {{ i }}</p>

in后面可以是数组、对象数组、对象、数字。

2、key属性只能使用number 获取String;

key在使用的时候,必须使用v-bind属性绑定的形式指定key值;

在组件中,使用v-for循环时,若有问题,必须在使用时,指定唯一的字符串/数字类型:key值。

<p v-for = "item in list " :key  = " item.id "> </P>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>

    <style>
      /* 自定义两组样式,来控制transition内部的元素实现动画 */
      .v-enter,
      .v-leave-to {
        opacity: 0;
        transform: translateX(150px);
      }
      .v-enter-active,
      .v-leave-active {
        transition: all 0.8s ease;
      }
      /* 自定义前缀 */
      .my-enter,
      .my-leave-to {
        opacity: 0;
        transform: translateY(150px);
      }
      .my-enter-active,
      .my-leave-active {
        transition: all 0.8s ease;
      }
      /* 定义动画小球 */
      .ball {
        width: 150px;
        height: 150px;
        border-radius: 50%;
        background-color: red;
      }
    </style>
    <link rel="stylesheet" href="./lib/animate.css" />
  </head>
  <body>
    <div id="app">
      <p>{{ msg }}</p>
      <div v-text="msg2"></div>
      <div v-html="msg2">123123</div>
      <input
        type="button"
        value="按钮"
        :title="mytitle + ‘123‘"
        v-on:click="show"
      />
      <input type="button" value="按钮1" @click="flag=!flag" /><br />
      <!-- transition元素,把被动画控制的元素包裹起来!固定的! -->
      <transition>
        <h3 v-if="flag">这是个会移动并且渐隐渐现的H3文字</h3>
      </transition>
      <input type="button" value="按钮2" @click="flag2=!flag2" /><br />
      <transition name="my">
        <h6 v-if="flag2">这是个会移动并且渐隐渐现的H6文字</h6>
      </transition>
      <br />
      <br />
      <br />
      <br />
      <br />
      <!-- 使用第三方的CSS实现动画 -->
      <input type="button" value="按钮3" @click="flag3=!flag3" /><br />
      <transition
        enter-active-class="bounceIn"
        leave-active-class="bounceOut"
        :duration="{ enter : 1000 , leave : 2000 }"
      >
        <h2 v-if="flag3" class="animated">这是个会蹦蹦跳跳的H2文字</h2>
      </transition>
      <!-- 跑马灯效果 -->
      <!-- 绑定点击事件 -->
      <br />
      <br />
      <br />
      <br />
      <br />
      <input type="button" value="浪起来" @click="lang" />
      <input type="button" value="低调" @click="stop" />
      <h4>{{ msg3 }}</h4>
      <h4>{{ msg4 }}</h4>
      <!-- 双向数据绑定v-model -->
      <input type="text" v-model="msg4" /><br />
      <!--计算器 -->
      <input type="text" v-model="n1" />
      <select v-model="opt">
        <option value="+">+</option>
        <option value="-">-</option>
        <option value="*">*</option>
        <option value="/">/</option>
      </select>
      <input type="text" v-model="n2" />
      <input type="button" value="=" @click="calc" />
      <input type="text" v-model="result" />
      <br />
      <br />
      <!-- 定义动画小球 -->
      <input type="button" value="快从碗里出去" @click="flag4=!flag4" />
      <transition
        @before-enter="beforeEnter"
        @enter="enter"
        @after-enter="afterEnter"
      >
        <div class="ball" v-show="flag4"></div>
      </transition>
    </div>
    <script src="./lib/vue.js"></script>
    <script>
      var vm = new Vue({
        el: "#app",
        data: {
          msg: "欢迎学习",
          msg2: "<h1>哈哈!我是一个大大的H1</h1>",
          mytitle: "这是一个自己定义的title",
          msg3: "猥琐发育,别浪~~!",
          intervalId: null, //在data上定义 停止定时器ID
          msg4: "大家都是好学生!",
          n1: 0,
          n2: 0,
          result: 0,
          opt: "+",
          flag: false,
          flag2: false,
          flag3: false,
          flag4: false
        },
        methods: {
          show: function() {
            alert("hello");
          },
          lang() {
            //为防止越点越快,设定条件必须是在停止的条件下点击才开启定时器
            if (this.intervalId != null) return;
            //为了停止方便停止定时器,必须进行定义为this
            //加入定时器,为解决this指向问题,使用了ES6的箭头函数=>,表示前后的this一致
            this.intervalId = setInterval(() => {
              // conso le.log(this.msg3)
              //获取到头的第一个字符
              var start = this.msg3.substring(0, 1);
              //获取后面的
              var end = this.msg3.substring(1);
              //重新拼接
              this.msg3 = end + start;
            }, 400);
          },
          stop() {
            //停止定时器
            clearInterval(this.intervalId);
            //虽然停止了定时器但是没有给器重新赋值为Null
            //每当清除了定时器后,重新给器赋值为null
            this.intervalId = null;
          },
          calc() {
            //计算器算法
            // switch(this.opt){
            //     case‘+‘:
            //         this.result=parseInt(this.n1)+parseInt(this.n2)
            //         break;
            //     case‘-‘:
            //         this.result=parseInt(this.n1)-parseInt(this.n2)
            //         break;
            //     case‘*‘:
            //         this.result=parseInt(this.n1)*parseInt(this.n2)
            //         break;
            //     case‘/‘:
            //         this.result=parseInt(this.n1)/parseInt(this.n2)
            //         break;
            // }
            //投机取巧方式,开发中少有
            var codeStr = "parseInt(this.n1)" + this.opt + "parseInt(this.n2)";
            this.result = eval(codeStr);
          },
          beforeEnter(el) {
            el.style.transform = "translate(0,0)";
          },
          enter(el) {
            el.offsetwidth;
            el.style.transform = "translate(150px,400px)";
            el.style.transition = "all 1s ease";
            done();
          },
          afterEnter(el) {
            this.flag4 = !this.flag4;
          }
        }
      });
    </script>
  </body>
</html>

原文地址:https://www.cnblogs.com/21-forever/p/11104581.html

时间: 2024-08-30 08:10:39

Vue学习所得小结(一)的相关文章

Vue学习知识小结

new 一个Vue对象的时候你可以设置它的属性,其中最重要的包括三个,分别是data,methods,watch. 其中     data代表                  Vue对象的数据 mthods代表             Vue对象的方法 watch设置了对象监听的方法 Vue对象里的设置通过html指令进行关联 重要的指令包括: v-text           渲染数据 v-html          渲染数据 {{msg}}      渲染数据 v-if          

Vue学习笔记入门篇——组件的使用

本文为转载,原文:Vue学习笔记入门篇--组件的使用 组件定义 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展. 组件使用 注册 注册一个全局组件,你可以使用 Vue.component(tagName, options).组件在注册之后,便可以在父实例的模块中以自定义元素 的形式使用.

Vue学习笔记入门篇——组件的内容分发(slot)

本文为转载,原文:Vue学习笔记入门篇--组件的内容分发(slot) 介绍 为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 "transclusion" 如果你熟悉 Angular).Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽. 编译作用域 在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译.假定模板为: <child-component> {{ messa

Vue学习笔记入门篇——组件的通讯

本文为转载,原文:Vue学习笔记入门篇--组件的通讯 组件意味着协同工作,通常父子组件会是这样的关系:组件 A 在它的模版中使用了组件 B.它们之间必然需要相互通信:父组件要给子组件传递数据,子组件需要将它内部发生的事情告知给父组件.然而,在一个良好定义的接口中尽可能将父子组件解耦是很重要的.这保证了每个组件可以在相对隔离的环境中书写和理解,也大幅提高了组件的可维护性和可重用性.在 Vue 中,父子组件的关系可以总结为 props down, events up.父组件通过 props 向下传递

Vue学习笔记目录

本文为转载,原文:Vue学习笔记目录 Vue介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快速地上手并使用Vue.js. 如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动的,你无需手动操作DOM.它通过一些特殊的HTML语法,将DOM和数据绑定起来.一旦你创建了绑定,DOM将和数据

Vue学习笔记进阶篇——Render函数

本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接近编译器. <h1> <a name="hello-world" href="#hello-world"> Hello world! </a> </h1>

vue学习笔记——简单的介绍以及安装(一)

学习编程需要的是 API+不断地练习^_^ Vue官网:https://cn.vuejs.org/ 菜鸟教程:http://www.runoob.com/vue2/vue-tutorial.html 1.简单的介绍 Vue.js(读音 /vju?/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. Vue 学习起来非常简单,本教程基于 Vue 2.1.8 版

【Vue学习笔记1】基于Vue2.2.6版本

记录一下自己关于Vue学习的过程,便于以后归纳整理以及复习. 1.下载引用vue.js 下载: npm install vue ,然后引用. 或直接线上引用: <script src="https://unpkg.com/vue/dist/vue.js"></script> 2.基于vue2.26版本 MVVM模式,M(模型),V(视图),VM(VideoModel)

Vue学习笔记进阶篇——过渡状态

本文为转载,原文:Vue学习笔记进阶篇--过渡状态Vue 的过渡系统提供了非常多简单的方法设置进入.离开和列表的动效.那么对于数据元素本身的动效呢,比如: 数字和运算 颜色的显示 SVG 节点的位置 元素的大小和其他的属性 所有的原始数字都被事先存储起来,可以直接转换到数字.做到这一步,我们就可以结合 Vue 的响应式和组件系统,使用第三方库来实现切换元素的过渡状态. 状态动画和watcher 通过 watcher 我们能监听到任何数值属性的数值更新.可能听起来很抽象,所以让我们先来看看使用 T