[vue]-No.03

[2017.03.16]

安装vue:nmp install vue;
在页面中引入vue.js:
<script src="https://unpkg.com/vue/dist/vue.js"></script>
入门小例子:

<body>   
 <div id="box">
        {{msg}}    
</div>
</body>
<script type="text/[JavaScript](http://lib.csdn.net/base/javascript)"> 
   window.onload = function(){        
var c = new Vue({           
 el:'#box', //选择器            
data:{                
msg:'Welcome'            
}        
});    
};
</script>

data里的数据:
字符串,数字,数组,json,bool;
常用指令:
v-model(产生数据):

<div id="box">        
  <input type="text" v-model="msg">
</div>

ps:其中数据双向绑定,msg修改时同步的;
v-for(循环):(自带index)--对于json数据还带有key
要输出json数据&数组时需要循环输出:
对于数组:

arr:["apple", "pear","orange"]
<ul>
            <li v-for="(value,index) in arr">
                {{value}} {{index}}            
</li> </ul>

对于json:

<li v-for="(value,index,key) in json"> 
               {{value}} {{index}} {{key}}
</li>
v-for="(k,v) in json"
{{k}} {{v}}

v-show: 隐藏消失
v-show="false"时消失;

<input type="button" value="disappear" v-on:click="showornot=true"><br>
<div v-show="showornot">
    我要出现辣!
</div>

基本事件:
v-on:click --点击事件
事件方法放在methods里,methods与data同级;
一定要注意它所在的选择器要对应上才可以,否则事件设置时无效的;

<input type="button" value="show" v-on:click="show()">
<br>
<input type="button" value="add" v-on:click="add()">
<br>
methods:{
 show:function(){ 
 alert(1);//输出数据                    
},                    
add:function(){
 this.arr.push("banana");//对该选择器下的数组进行动态添加                    
}
}

v-on:mouseover, mouseout, mousedown, dblclick(双击);

简易留言板(bootstrap + vue.js):
bootstrap:css框架 ---只需要给元素赋class,角色;
一些样式无需自己定义;

<link href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://code.[jQuery](http://lib.csdn.net/base/jquery).com/jquery.js"></script>
<script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>

布局:
两个信息输入框,添加按钮,重置按钮,信息展示框(框内每条记录有三个字段和一个操作),有删除全部按钮;
样式:
输入框--class="form-control",placehold 底部默认提示;
组合--class="form-group";
按钮--class="btn btn-primary"(蓝色普遍按钮),class="btn btn-danger"(红色警示按钮);
表格--class="table table-bordered table-hover"(细边框,鼠标滑过每条记录时的加深效果);
表格列--colspan="4" class="text-center"(合并一列);
其他--class="text-info text-center"(字体加粗以及居中);
模态框--role="dialog" class="modal fade bs-example-modal-sm" id="layer"(role角色就是模态框,fade由上滑下,bs-example-modal-sm型号small),模态框内层有content,content内层分header和body,header可以放置关闭x和标题,body内可以放置其他提示以及一些关键确认按钮;
功能:
添加记录,重置输入框,删除记录,清除记录;
① 添加纪录:就是读取输入框内信息,对数组进行push内容
v-on:click="add()"
add:function(){this.mydata.push({name:this.username,age:this.age});}
其中username和age是这个vue的内部数据变量;
② 重置输入框:采用v-model属性,尤其是它的数据双向绑定
在输入框加载时就将username和age作为默认值;
v-on:click="reset()"
reset:function(){this.username = "";this.age = "";}
③ 删除记录以及清除记录:在删除时我们想要它能跳出一个确认提示框--采用模态框
删除按钮需要和模态框进行绑定;
data-toggle="modal" data-target="#layer"(layer时模态框的id);
在删除时需要获得当前需被删除的记录索引,所以在按下删除按钮时就须获得当前的索引值index(现在的index时不需要$符号的);
v-on:click="nowIndex=index"
然后在确认提示框的确认按钮下对记录进行删除/清除;(函数名不能采用delete)
v-on:click="deleteMsg(nowIndex)"
deleteMsg:function(n){if(n == -2){this.mydata = [];}elsethis.mydata.splice(n,1);}
效果:
初始:



添加记录:
[图片上传中。。。(2)]
确认提示框:



删除第一条记录:

清除所有记录:

完整代码:

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>留言板</title>  
    <link href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">  
    <script src="https://code.jquery.com/jquery.js"></script>  
    <script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>  
    <script src="https://unpkg.com/vue/dist/vue.js"></script>  
    <script>  
        window.onload = function(){  
            new Vue({  
                el:"#box",  
                data:{  
                    mydata:[  
                        {name:'Tom', age:'13'},  
                        {name:'Amy', age:'19'},  
                        {name:'Tony', age:'54'}  
                    ],  
                    username:'',  
                    age:'',  
                    nowIndex:-100  
                },  
                methods:{  
                    add:function(){  
                        this.mydata.push({  
                            name:this.username,  
                            age:this.age  
                        });  
                    },  
                    reset:function(){  
                        this.username = "";  
                        this.age = "";  
                    },  
                    deleteMsg:function(n){  
                        if(n == -2){  
                            this.mydata = [];  
                        }  
                        else  
                        this.mydata.splice(n,1);  
                    }  
                }  
                });  
            }  
    </script>  
</head>  
<body>  
    <div class="container" id="box">  
        <form role="form">  
            <div class="form-group">  
                <label for="username">username</label>  
                <input type="text" id="username" class="form-control" placeholder="enter username" v-model="username">  
            </div>  
            <div class="form-group">  
                <label for="age">age</label>  
                <input type="text" id="age" class="form-control" placeholder="enter age" v-model="age">  
            </div>  
            <div class="form-group">  
                <input type="button" id="add" value="add" class="btn btn-primary" v-on:click="add()">  
                <input type="button" id="submit" value="reset" class="btn btn-danger" v-on:click="reset()">  
            </div>  
        </form>  
        <hr>  
        <table class="table table-bordered table-hover">  
            <caption class="h3 text-info text-center">Message</caption>  
            <!-- text-info 加粗 -->  
            <tr class="text-info text-center">  
                <th class="text-center">NO</th>  
                <th class="text-center">name</th>  
                <th class="text-center">age</th>  
                <th class="text-center">operate</th>  
            </tr>  
            <tr class="text-center" v-for="(item,index) in mydata">  
                <td>{{index}}</td>  
                <td>{{item.name}}</td>  
                <td>{{item.age}}</td>  
                <td>  
                    <button class="btn btn-danger btn-sm" data-toggle="modal" data-target="#layer" v-on:click="nowIndex=index">delete</button>  
                </td>  
            </tr>  
            <!-- 合并四个单元格 -->  
            <tr v-show="mydata.length != 0">  
                <td colspan="4" class="text-center">  
                    <button class="btn btn-danger" data-toggle="modal" data-target="#layer" v-on:click="nowIndex=-2">delete all</button>  
                </td>  
            </tr>  
            <tr v-show="mydata.length == 0">  
                <td colspan="4" class="text-center text-info text-muted">  
                    <p>暂无数据...</p>  
                </td>  
            </tr>  
        </table>  
        <!-- 模态框 弹出框 -->  
        <div role="dialog" class="modal fade bs-example-modal-sm" id="layer">  
            <div class="modal-dialog">  
                <div class="modal-content">  
                    <div class="modal-header">  
                        <button class="close" data-dismiss="modal">  
                            <span>×</span>  
                        </button>  
                        <h3 class="modal-title">确认删除吗?</h3>  
                    </div>  
                    <div class="modal-body text-right">  
                        <button class="btn btn-primary btn-sm" data-dismiss="modal">取消</button>  
                        <button class="btn btn-danger btn-sm" data-dismiss="modal" v-on:click="deleteMsg(nowIndex)">确认</button>  
                    </div>  
                </div>  
            </div>  
        </div>  
    </div>  
</body>  
</html>

简约版留言板:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>practice01</title>
    <link href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://code.jquery.com/jquery.js"></script>
    <script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
      <!-- my data source -->
      <script>
        window.onload = function(){
          new Vue({
              el:"#box",
              data:{
                  myMsg:[
                  ],
                  username:'',
                  msg:'',
                  nowIndex:-100
              },
              methods:{
                  add:function(){
                      this.myMsg.push({
                          name:this.username,
                          msg:this.msg
                      });
                  }
              }
              });
        }
      </script>
  </head>
  <body>
    <div id="box">
      <!-- {{msg}} -->
      <form class="form">
        <div class="form-group">
          <label>username</label>
          <input type="text" name="username" placeholder="username" class="form-control" v-model="username">
        </div>
        <div class="form-group">
          <label>Message</label>
          <textarea type="text" name="msg" placeholder="message" class="form-control" v-model="msg"></textarea>
        </div>
        <div class="form-group">
          <input type="button" value="add" class="btn btn-primary float-right" v-on:click="add()">
        </div>
      </form>
      <p v-show="myMsg.length==0" class="text-center">暂无留言</p>
      <div class="form-group"  v-for="(item,index) in myMsg">
        <label>{{item.name}}</label>
        <div class="text-center">{{item.msg}}</div>
        <hr>
      </div>
    </div>
  </body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 4,972评论 0 29
  • 转载 :OpenDiggawesome-github-vue 是由OpenDigg整理并维护的Vue相关开源项目库...
    果汁密码阅读 22,983评论 8 125
  • 时间就那样匆匆走过 从不会等我 说会做到的明天 转眼就变成了一事无成的昨天 我以为的童年 也如褪了色的相片 年少时...
    VCWLEU阅读 238评论 0 1
  • 话唠找到地方了
    qi15阅读 315评论 0 0
  • 刚开始学习占卜的时候,每解一次卦,总是希望老师给出此卦解的对与错的点评。 往往老师给出的却是模凌两可的回复,我不觉...
    兰姐美式减脂倡导者阅读 378评论 0 0