VUE基础

使用VUE实现用户登陆功能和列表展示功能

一、贯穿案例展示

二、案例切片

  • 切片1:实现登陆功能
  • 切片2:楼宇表格数据展示

三、切片1:实现登陆功能

3.1、原型图(axure)

用axure现场画
复制代码

3.2、实现需求

3.2.1、需求分析

需求分解:
1、绘制html
2、通过双向绑定的技术,获取用户名和密码并输出到页面上
复制代码

3.2.2、需求实现

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="js/vue.min-v2.5.16.js"></script>
  </head>
  <body>
    <div id="app">
      <h1>用户登陆</h1>
      用户名:<input type="text" v-model="username" size="20"/><br />
      密码:<input type="password" v-model="passwd" size="20"/><br />
      <button>登陆</button><hr />
      {{'用户名:'+username+', 密码:'+passwd}}
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app', //表示当前vue对象接管了div区域
        data:{
          username:'admin',
          passwd:'123'
        }
      });
    </script>
  </body>
</html>
复制代码

3.3、知识点补充

3.3.1、导入:为什么要使用VUE?

前端开发人员的首选入门框架,Vue 有很多优势:

  • Vue.js 可以进行组件化开发,使代码编写量大大减少,开发者更加易于理解。
  • Vue.js 最突出的优势在于可以对数据进行双向绑定(在之后的编写中我们会明显地感觉到这个特点的便捷)。
  • 使用 Vue.js 编写出来的界面效果本身就是响应式的,这使网页在各种设备上都能显示出非常好看的效果。
  • 相比传统的页面通过超链接实现页面的切换和跳转,Vue 使用路由不会刷新页面。

通过VUE,我们可以实现Model 和 View之间的交互的双向性, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上,这就是大名鼎鼎的双向数据绑定,也称为MVVM开发模式。

MVC软件开发模式和MVVM软件开发模式有啥区别呢?

  • MVC开发模式一般用于后端应用开发
  • MVVM开发模式一般用于前端应用开发

3.3.2、插值表达式

数据绑定常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值,Mustache 标签将会被替代为对应数据对 象上属性的值。无论何时,绑定的数据对象上属性发生了改变,插值处的内容都会更新。

Vue.js 都提供了完全的 JavaScript 表达式支持

{{ number + 1 }}
 
{{ ok ? 'YES' : 'NO' }}
复制代码

这些表达式会在所属 Vue 实例的数据作用域下作为 JavaScript 被解析。有个限制就是,每个绑定都只能包含单个 表达式,所以下面的例子都不会生效。

<!-- 这是语句,不是表达式 -->
{{ var a = 1 }}
<!-- 流控制也不会生效,请使用三元表达式 -->
{{ if (ok) { return message } }}
复制代码

3.3.3、v-model

v-model 指令用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值。

3.3.4、v-text和v-html

v-text等价于设置innerText属性值,v-html等价于设置innerHTML属性值

<p v-text = "msg"></p>
<p v-html = "msg"></p>
var vm = new Vue({
    el:"#app",    
        data:{
        msg : "<font color='red'>大家好</font>"
    } 
})
复制代码

3.3.5、v-bind控制HTML元素属性

插值语法不能作用在 HTML 属性上,遇到这种情况应该使用 v-bind指令

3.3.5.1、v-bind

<p v-bind:title="msg'"></p>
复制代码

3.3.5.2、使用简化指令

<p :title="msg"></p>
复制代码

代码示例:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="js/vue.min-v2.5.16.js"></script>
  </head>
  <body>
    <div id="app">
      <!-- <p v-bind:title="msg">什么是我的最爱?</p> -->
      <p :title="msg">什么是我的最爱?</p>
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data:{
          msg:'我爱北京天安门'
        }
      });
    </script>
  </body>
</html>
复制代码

效果:

3.3.5.3、v-bind的变形格式

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="js/vue.min-v2.5.16.js"></script>
  </head>
  <body>
    <div id="app">
      <a v-bind="{href:url}" v-text="info" :title="msg"></a>
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data:{
          info:'百度一下,你就知道',
          url:'https://www.baidu.com/',
          msg:'进入百度'
        }
      });
    </script>
  </body>
</html>
复制代码

效果:

3.3.6、v-on监听 DOM 事件

可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码

3.3.6.1、v-on:click

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>事件处理 v-on示例1</title>
    <script src="js/vuejs-2.5.16.js"></script>
    </head>
    <body>
        <div id="app">
            {{message}}
            <button v-on:click="fun1('good')">点击改变</button>
        </div>
        <script>
            new Vue({
                el:'#app', //表示当前vue对象接管了div区域
                data:{
                    message:'hello world' //注意不要写分号结尾
                },
                methods:{
                    fun1:function(msg){
                        this.message=msg;
                    }
                }
            });
        </script>
    </body>
</html>
复制代码

3.3.6.2、v-on简写方式

<!-- 完整语法 -->
<a v-on:click="doSomething">...</a>
<!-- 缩写 -->
<a @click="doSomething">...</a>
复制代码

3.4、案例拓展

3.4.1、案例一

需求:用Vue实现一个简易计算器

使用到的知识点

1、双向绑定
2、v-on监听 DOM 事件
复制代码

参考代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <script src="js/vue.min-v2.5.16.js"></script>
    <title></title>
  </head>
  <body>
    <div id="vm">
          <input type="text" v-model="num1">
          <select v-model="opt">
              <option value="">==请选择==</option>
              <option value="0">+</option>
              <option value="1">-</option>
              <option value="2">*</option>
              <option value="3">÷</option>
          </select>
          <input type="text" v-model="num2">
          <input type="button" value="=" @click="cal">
          <input type="text" v-model="result">
      </div>
      <script type="text/javascript">
          let vm = new Vue({
              el: "#vm",
              data: {
                  num1: "", //操作数1
                  num2: "", //操作数2
                  opt: "", //运算符
                  result: "" //保存计算结果
              },
              methods: {
                  cal: function () {
                      switch (vm.opt) {
                          case "0":
                              this.result = parseInt(this.num1) + parseInt(this.num2)
                              break;
                          case "1":
                              this.result = this.num1 - this.num2;
                              break;
                          case "2":
                              this.result = this.num1 * this.num2;
                              break;
                          case "3":
                              this.result = this.num1 / this.num2;
                              break;
                          default:
                              alert("请选择运算符");
                              break
                      }
                  }
              }
          })
      </script> 
  </body>
</html>
复制代码

3.5、小结

现场提问

1、什么是MVVM开发模式?和MVC开发模式有什么区别?
2、如何将数据与表单元素进行双向绑定?
3、如何通过Vue绑定DOM事件?
4、如何通过Vue控制HTML元素属性
复制代码

四、切片2:楼宇表格数据展示

4.1、原型图(axure)

用axure现场画
复制代码

4.2、实现需求

4.2.1、需求分析

需求分解:
1、绘制HTML
2、使用Vue,在data属性中添加一个楼宇记录列表
3、使用Vue将数据与HTML表格进行双向绑定
复制代码

4.2.2、需求实现

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="js/vue.min-v2.5.16.js"></script>
  </head>
  <body>
    <div id="app">
      <table border="1">
        <tr>
          <th>编号</th>
          <th>单元</th>
        </tr>
        <tr v-for="b in buildings">
          <td>{{b.no}}</td>
          <td>{{b.unit}}</td>
        </tr>
      </table>
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data:{
          buildings:[
            {'no':'1001', 'unit':'1单元'},
            {'no':'1002', 'unit':'2单元'},
            {'no':'1003', 'unit':'3单元'}
          ]
        }
      });
    </script>
  </body>
</html>
复制代码

4.3、知识点补充

4.3.1、v-for

循环使用 v-for 指令。

v-for 指令需要以 site in sites 形式的特殊语法, sites 是源数据数组并且 site 是数组元素迭代的别名。

v-for 可以绑定数据到数组来渲染一个列表。

4.3.2、v-if

条件判断使用 v-if 指令。

点击按钮后效果:

参考代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="js/vue.min-v2.5.16.js"></script>
  </head>
  <body>
    <div id="app">
      <p v-if="isShow">你好世界</p>
      <button @click="doChange()">点我试试</button>
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data:{
          isShow:true
        },
        methods: {
          doChange() {
            if(this.isShow){
              this.isShow = false;
            } else {
              this.isShow = true;
            }
          }
        },
      });
    </script>
  </body>
</html>
复制代码

4.3.3、v-show

根据表达式的值来切换元素的display css属性,说白了,就是控制一个HTML元素的显示状态(显示或隐藏),接下来我们通过一个案例来演示,在网页上通过一个按钮来控制文字的显示状态

点击按钮前效果:

点击按钮后效果:

参考代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="js/vue.min-v2.5.16.js"></script>
  </head>
  <body>
    <div id="app">
      <p v-show="isShow">你好世界</p>
      <button @click="doChange()">点我试试</button>
    </div>
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data:{
          isShow:true
        },
        methods: {
          doChange() {
            if(this.isShow){
              this.isShow = false;
            } else {
              this.isShow = true;
            }
          }
        },
      });
    </script>
  </body>
</html>
复制代码

4.3.4、v-if和v-show的区别

v-if是根据表达式的值来决定是否渲染元素,条件判断使用 v-if 指令。 v-show是根据表达式的值来切换元素的display css属性

v-if 的特点:每次都会重新删除或创建元素;

v-show 的特点: 每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式

4.4、案例拓展

4.4.1、案例一

使用Vue实现商品列表显示

使用到的知识点

1、双向绑定
2、v-for指令循环渲染表格数据
复制代码

参考代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>v-for示例1</title>
        <script src="js/vue.min-v2.5.16.js"></script>
    </head>
    <body>
        <div id="app">
            <table border="1">
                <tr>
                    <td>序号</td>
                    <td>名称</td>
                    <td>价格</td>
                </tr>
                <tr v-for="p in products">
                    <td>
                        {{p.id}}
                    </td>
                    <td>
                        {{p.pname}}
                    </td>
                    <td>
                        {{p.price}}
                    </td>
                </tr>
            </table>
        </div>
        <script>
            new Vue({
                el:'#app', //表示当前vue对象接管了div区域
                data:{
                    products:[{id:1,pname:"电视机",price:6000},{id:2,pname:"电冰箱",price:8000}, {id:3,pname:"电风扇",price:600}]
                }
            });
        </script>
    </body>
</html>
复制代码

4.5、小结

现场提问

1、如何在Vue中渲染列表页面?
2、如果在页面中,需要频繁显示或隐藏某个控件,可以使用Vue中的哪个指令?
复制代码

五、课程小结

5.1、知识框架图

现场提问,用XMind现场总结,再次加深学生印象

5.2、课后作业

需求定义

使用Vue实现用户注册的功能,已知当前数据库中已经存在了admin的用户,所以当注册用户时用户输入了admin则不允许注册

需求分解

1、绘制HTML页面
2、通过Vue的双向绑定将文本框中用户名和密码与data中的username和passwd变量值绑定
3、使用v-on注册按钮点击事件,当按钮被点击时,判断用户名是否重复,如果重复,弹出警告对话框
复制代码

原型设计

略
复制代码

作者:用户1463463168339
链接:https://juejin.cn/post/7162060531359514638
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值