Vue todolist

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet"  integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  </head>
  <body>

    <div id="app">
    <nav class="navbar navbar-inverse">
        <!--默認(rèn)顏色為灰色 navbar-inverse是反色導(dǎo)航條-->
        <div class="container-fluid">
          <div class="navbar-header">
            <a class="navbar-brand" href="#">
              大白熊
            </a>
          </div>
        </div>
      </nav>
      <div class="container">
        <div class="row">
          <div class="panel panel-info">
            <div style="font-size:30px" class="panel-heading" >還有<span class="text-danger" v-cloak>{{x}}</span>件事需要完成</div>
            <div class="panel-body">
                <input type="text" class="form-control" placeholder="請(qǐng)輸入添加的項(xiàng)目" v-model="newItem" @keydown.Enter="addnew">
                <!--form-control是將輸入框橫向填滿(mǎn)-->
              <ul class="nav nav-pills" style="margin-top:5px">
                <li role="presentation" :class="{active:hash=='#/all'}"><a href="#/all" >全部</a></li>
                <li role="presentation" :class="{active:hash=='#/finish'}"><a href="#/finish">已完成</a></li>
                <li role="presentation" :class="{active:hash=='#/unfinish'}"><a href="#/unfinish">未完成</a></li>
              </ul>
              <ul class="list-group" style="margin-top:5px">
                <li class="list-group-item" v-for="thing in things" :class="{disabled:thing.hasdone}" @dblclick="change(thing)" >
                  <span v-show="thing.flag">
                    <input type="checkbox" v-model="thing.hasdone" v-cloak >
                    {{thing.name}}
                  </span>
                  <input type="text"  v-show="!thing.flag" v-model="thing.name"  @keydown.Enter="thing.flag=!thing.flag" @blur="thing.flag=!thing.flag" v-focus="!thing.flag">
                  <button class="btn btn-xs btn-danger pull-right" @click="del(thing)">刪除</button>
                </li>
              </ul>
            </div>
            <div class="panel-footer"></div>
          </div>
        </div>
      </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="pro.json"></script>
    <script>
      const vm=new Vue(
      {

        directives:{
          //自定義指令
          focus(el,bindings){
            //el指操縱的dom
            if(bindings.value==true)
            {//bindings是綁定的屬性间景,.value表示值
              el.focus()
            }
          }
            },
        el:"#app",
        created(){
          if(localStorage.getItem('data')==null)
          {
            //如果localStorage中有數(shù)據(jù)就用localStorage垂券,沒(méi)有用json中定義的
            axios.get('./todo.json').then(data=>{this.allthings=data.data},function(err){alert("err")})

          }
          else {
            this.allthings=JSON.parse(localStorage.getItem('data'))
          }
          this.finishthings=this.allthings.filter((item)=>item.hasdone)
          this.unfinishthings=this.allthings.filter((item)=>!item.hasdone)
          //第一個(gè)參數(shù)是事件,第二個(gè)是回調(diào)函數(shù)落剪,第三個(gè)默認(rèn)為false
          //監(jiān)控hash的變化,如果頁(yè)面已經(jīng)有hash了锣杂,重新刷新頁(yè)面也要獲取hash
          this.hash=window.location.hash||'#/all';
          window.addEventListener("hashchange",()=>{
            this.hash=window.location.hash
          },false)
        },
        computed:{
          things:{
            get(){
              if(this.hash=='#/all')
              {
              return this.allthings;
              }

              else if(this.hash=='#/unfinish')
              {

                return this.unfinishthings;
              }
              else if(this.hash=='#/finish')
              {
              return this.finishthings;
              }
            }
          },
          x:{
            get(){
              return this.allthings.filter(item=>!item.hasdone).length
            }
          }
        },
        methods:
        {
          change(thing)
          {
            this.allthings.forEach(item=>{
              if(item==thing)
              item.flag=false;
              else {
                item.flag=true
              }
            })

          },
          del(o){
            this.allthings=this.allthings.filter(item=>item!=o)
          },
          addnew(){
            this.allthings.push({name:this.newItem,hasdone:false,flag:true})
            this.newItem=""
          }
        },
        watch:{
          allthings:{
            //改變name不會(huì)觸發(fā)watch此洲,watch默認(rèn)只監(jiān)控一層是數(shù)據(jù)變化,數(shù)組變化能夠監(jiān)控业崖,數(shù)組內(nèi)對(duì)象內(nèi)容變化不會(huì)監(jiān)控到
            handler(newVal,oldVal){//默認(rèn)寫(xiě)成函數(shù)野芒,相當(dāng)于默認(rèn)寫(xiě)了handler
              //localStorage默認(rèn)存儲(chǔ)字符串
              localStorage.setItem('data',JSON.stringify(this.allthings))
              this.finishthings=this.allthings.filter((item)=>item.hasdone)
              this.unfinishthings=this.allthings.filter((item)=>!item.hasdone)
            },deep:true
          }
        },
        data:{
          allthings:[],
          unfinishthings:[],
          finishthings:[],
          newItem:"",
          hash:""
        }
      }
      )

    </script>

  </body>

</html>

todo.json文件
[
{"name":"背英語(yǔ)","hasdone":false,"flag":true},
{"name":"打游戲","hasdone":false,"flag":true},
{"name":"散步","hasdone":false,"flag":true}
]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市双炕,隨后出現(xiàn)的幾起案子狞悲,更是在濱河造成了極大的恐慌,老刑警劉巖妇斤,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摇锋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡站超,警方通過(guò)查閱死者的電腦和手機(jī)荸恕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)顷编,“玉大人戚炫,你說(shuō)我怎么就攤上這事∠蔽常” “怎么了双肤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)钮惠。 經(jīng)常有香客問(wèn)我茅糜,道長(zhǎng),這世上最難降的妖魔是什么素挽? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任蔑赘,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缩赛。我一直安慰自己耙箍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布酥馍。 她就那樣靜靜地躺著辩昆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旨袒。 梳的紋絲不亂的頭發(fā)上汁针,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音砚尽,去河邊找鬼施无。 笑死,一個(gè)胖子當(dāng)著我的面吹牛必孤,可吹牛的內(nèi)容都是我干的猾骡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼隧魄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卓练!你這毒婦竟也來(lái)了隘蝎?” 一聲冷哼從身側(cè)響起购啄,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘱么,沒(méi)想到半個(gè)月后狮含,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡曼振,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年几迄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冰评。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡映胁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甲雅,到底是詐尸還是另有隱情解孙,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布抛人,位于F島的核電站弛姜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏妖枚。R本人自食惡果不足惜廷臼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧荠商,春花似錦寂恬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至郊愧,卻和暖如春朴译,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背属铁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工眠寿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人焦蘑。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓盯拱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親例嘱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狡逢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344