vue-1

MVVM框架

数据可以影响视图视图可影响数据。

基本结构

引入:<script src="js/vue.js"></script>

html部分:
<div id="app"></div>

script部分:
<script>
    var app= new Vue({
        el:'#app',
        data:{
            //所有的数据都写在data里面
        },
        methods:{
            //所有的函数都写在methods里面
        }
    })
</script>

表达式

{{msg}}-->显示 、{{msg=320}}-->赋值 、{{bok?"haha":"wuwu"}}-->三目

   <div id="app">
     <h1>{{mas}} {{msg=320}} {{bok?"haha":"wuwu"}}</h1>   
   </div>
    <script>
        var app= new Vue({
            el:'#app',
            data:{
                msg:"哈哈",
                bok:true
            }
        })
    </script>

声明式渲染

<div id="app">
{{msg}}
</div>
<script>
    var app=new Vue({
        el:'#app',
        data:{//专门用来存数据
            msg:'hello'
        }
    })
</script>

  1. 动态绑定数据(动态更改dom属性) v-bind:title(会爆红),可直接写成 :title
  2. 条件判断 v-if
<div id="app">
    <button type="button" @click="bok=!bok">点击显示和隐藏</button>
    <h1 v-if="bok">看我</h1>
</div>
<script>
    var app=new Vue({
        el:'#app',
        data:{
            bok:true;
        }
    })
</script>
  1. 点击事件:v-on:click--->简写为 @click
  2. 循环 v-for
// 数组
<ul>
    <li v-for="item in friutes"> {{item}}</li>
</ul>
<ol>
    <li v-for="(item,index) in friutes">{{item}}我的索引是{{index}}</li>
</ol>
//JSON
<ul>
    <li v-for="(item,index) in pop">{{index}}的名字是{{item.name}}</li>
</ul>
//对象
    <ol>
        <li v-for="(item,index) in obj">{{index}}的值{{item}}</li>
    </ol>
<script>
    var app=new Vue({
        el:'#app',
        data:{
            friutes:['西瓜','葡萄','苹果','橘子'],
            pop:[
                {name:'lili'},
                {name:'wawa'},
                {name:'huhu'},
                {name:'bobo'},
            ],
            obj: {
                name1: 'lili',
                name2: 'huhu',
                name3: 'haha',
                name4: 'wowo'
            }
        }
        
    })
</script>
  1. 事件绑定

需求点击按钮翻转文字

 <div id="app">
     <button type="button" @click="reverseMessage">点我翻转文字</button>
     <h1>{{msg}}</h1>
 </div>
 <script>
     var app = new Vue({
         el: '#app',
         data: {
             msg: "你好吗"
         },
         methods: {
             reverseMessage(){
                 this.msg = this.msg.split('').reverse().join('')
             }
         }
     })
 </script>
  1. 视图影响数据 v-model

v-once 只被影响一次 后面视图改变数据不改变

<div id="app">
    <h1 v-once>{{msg}}</h1>
    <input type="text" v-model="msg">
    <h1>{{msg}}</h1>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            msg: "你好吗"
        }
    })
</script>
  1. 渲染标签 v-html
<div id="app">
    <div v-html="msg"></div>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            msg:'<h1>我是标签1</h1>'
        }
    })
</script>
  1. 自定义组建

组建需要注册Vue.component('组建名',{props:['属性名'],template:'<li>{{todo}}</li>'});

  • 我定义了属性名为 todo,todo的msg的值是data里面msg的值,而li拿的是todo的值
<div id="app">
    <warm-t :todo="msg"></warm-t>
</div>
<script>
    //注册一个组建
    Vue.component('warm-t',{
        props:['todo'],
        template:'<li>{{todo}}</li>'
    });

    var app = new Vue({
        el: '#app',
        data: {
            msg: "你好 "
        }

    })
</script>
  • 数组--》使用自定义组建,通过自定义属性给自定义组建传数据
<div id="app">
    <warm-t v-for="item in ary" :todo="item"></warm-t>
</div>
<script>
    //注册一个组建
    Vue.component('warm-t',{
        props:['todo'],
        template:'<li>{{todo}}</li>'
    });

    var app = new Vue({
        el: '#app',
        data: {
            ary:['西瓜','葡萄','苹果','橘子']
        }

    })
  • json
<div id="app">
    <warm-t v-for="(item,index) in pop" :todo="item"></warm-t>
</div>
<script>
    //注册一个组建
    Vue.component('warm-t',{
        props:['todo'],
        template:'<li>{{todo.name}}</li>'
    });

    var app = new Vue({
        el: '#app',
        data: {
            pop:[
                {name:'lili'},
                {name:'wawa'},
                {name:'huhu'},
                {name:'bobo'},
            ]
        }

    })
</script>
  1. v-show和v-if
   <div id="app">
       <button type="button" @click="bok=!bok"> 点击显示隐藏</button>
       <div v-show="bok">你能看见我吗</div>//display:none
       <div v-if="bok">你能看见我吗</div>//appendChild和removeChild
   </div>
   <script>
       var app = new Vue({
           el: '#app',
           data: {
               bok: true
           }
       })
   </script> 
  1. 购物车小例子

使用技术:bootstrap和vue2

npm init --y
npm i --save-dev vue bootstrap

代码:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>

 <link rel="stylesheet" href="css/bootstrap.css">

 <script src="node_modules/vue/js/vue.js"></script>

</head>
<body>
<div id="app">
 <div class="container">
     <div class="row">
         <table class="table table-bordered col-md-12">
             <caption class="text-danger">购物车</caption>
             <tr>
                 <th class="text-center">商品名称</th>
                 <th class="text-center">商品价格</th>
                 <th class="text-center">操作</th>
             </tr>
             <tr v-for="(item,index) in ary">
                 <td class="text-center">{{item.name}}</td>
                 <td class="text-center">{{item.price}}</td>
                 <td class="text-center">
                     <button class="btn btn-danger text-center
" @click="removeOne(index)">删除
                     </button>
                 </td>
             </tr>
             <tr>
                 <td colspan="3" class="text-right" v-show="ary.length?true:false">
                     <button class="btn btn-danger" @click="removeAll()">
                         删除全部
                     </button>
                 </td>
             </tr>
         </table>
         <form type="form">
             <div class="form-group">
                 <label for="name">商品名称</label>
                 <input type="text" id="name" class="form-control" placeholder="请输入商品名称" v-model="name">
             </div>
             <div class="form-group">
                 <label for="price">价格</label>
                 <input type="text" id="price" class="form-control" placeholder="请输入商品价格" v-model="price">
             </div>
             <div class="form-group">
                 <button type="button" class="btn btn-info" @click="add()">添加</button>
                 <button type="button" class="btn btn-warning" @click="reset()">重置</button>
             </div>
         </form>
     </div>

 </div>
</div>
<script>
 var app = new Vue({
     el: '#app',
     data: {
         name: '',
         price: '',
         ary: [
             {name: "iphone1", price: 3999},
             {name: "iphone2", price: 4999},
             {name: "iphone5", price: 6999}
         ]
     },
     methods: {
         removeOne(index){
             this.ary.splice(index, 1);
         },
         removeAll(){
             this.ary = [];
         },
         add(){
             this.ary.push({
                 name: this.name,
                 price: this.price
             });
             this.name = '';
             this.price = '';
         },
         reset(){
             this.name = '';
             this.price = '';
         }

     }
 })
</script>
</body>
</html>

vue-2

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

推荐阅读更多精彩内容

  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 10,994评论 4 129
  • 模板语法 插值 Vue 2 提供了 v-once 指令进行一次插值,替代了 Vue 1 的 {{ * msg }}...
    云之外阅读 647评论 0 3
  • 发布时间:2014年2月开源的一个前端开发库 1 官网介绍 2 版本下载 http://v1-cn.vuejs.o...
    Jianshu9527阅读 1,150评论 0 0
  • 计算属性 计算属性和data对象属性都是可以直接在DOM上直接使用的 但计算属性可以获取data对象属性,根据获取...
    林立镇阅读 324评论 0 0
  • 今天参加了趁早年计划制定的主题分享活动,认识了很多高颜值高执行力的小伙伴,也非常感谢@山茶的邀请,让我有机会梳理下...
    职场小能手Sara阅读 289评论 0 1