Vue.js-初體驗(yàn)

如果要實(shí)現(xiàn)一個(gè)增刪辦事列表的功能处坪,在不引用外部庫(kù)與框架的情況下(不考慮兼容性),我們一般會(huì)寫(xiě)成下面這種形式架专。(輸入框輸入后同窘,按下Enter鍵后,更新列表部脚。)查看演示

    <div>
      <input id="input" />
      <ul id="list">
        <!-- <li>
          <span></span>
          <button>X</button>
        </li> -->
      </ul>
    </div>

    <script type="text/javascript">
        var input = document.getElementById('input');
        var list = document.getElementById('list');

        function createNode(str) {
            var div = document.createElement('div');
            div.innerHTML = str;
            return div.children[0];
        }
        var temp = '<li><span></span><button>X</button></li>'

        input.addEventListener('keyup', function(event) {
            if(event.keyCode == 13 && input.value) {
                var newNode = createNode(temp);
                list.appendChild(newNode);
                
                var span = newNode.getElementsByTagName('span')[0];
                var deleteBtn = newNode.getElementsByTagName('button')[0];

                console.log(deleteBtn.parentNode);

                span.innerText = input.value;
                input.value = '';

                deleteBtn.onclick =  function() {
                    console.log(this.parentNode);
                    list.removeChild(this.parentNode);
                };
            }
        });
       </script>

使用Vue.js代碼可以寫(xiě)成下面的形式想邦。(使用Vue.js需下載引入vue.js文件)

<div id="app">
      <input v-model="newTodo" v-on:keyup.enter="addTodo">
      <ul>
        <li v-for="todo in todos">
          <span>{{ todo.text }}</span>
          <button v-on:click="removeTodo($index)">X</button>
        </li>
      </ul>
    </div>

    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript">
        new Vue({
          el: '#app',
          data: {
            newTodo: '',
            todos: [
              { text: 'Add some todos' }
            ]
          },
          methods: {
            addTodo: function () {
              var text = this.newTodo.trim()
              if (text) {
                this.todos.push({ text: text })
                this.newTodo = ''
              }
            },
            removeTodo: function (index) {
              this.todos.splice(index, 1)
            }
          }
        })
    </script>

使用Vue寫(xiě)完最大的感受就是,整個(gè)過(guò)程沒(méi)有直接操作DOM委刘。只對(duì)數(shù)據(jù)進(jìn)行操作就可以控制頁(yè)面顯示丧没,并且,Vue對(duì)象層次劃分清晰锡移,比如上面骂铁,Vue對(duì)象里el選中容器,data存儲(chǔ)數(shù)據(jù)罩抗,methods定義方法。

然后我發(fā)現(xiàn)灿椅,學(xué)習(xí)可以使用下面方法:學(xué)習(xí)一個(gè)新東西套蒂,先不管懂不懂,對(duì)著示例把代碼碼一遍茫蛹,如果這個(gè)新工具是老工具的替代操刀,也要使用老的方法實(shí)踐一遍,然后進(jìn)行對(duì)比婴洼,就會(huì)對(duì)新工具有更直觀的感受骨坑。

對(duì)Vue體驗(yàn)過(guò)后,驚訝于它的簡(jiǎn)潔與強(qiáng)大,于是上網(wǎng)找能夠使用Vue的練習(xí)欢唾∏揖看到一個(gè)功能比較適合:添加書(shū)籍列表(沒(méi)有進(jìn)行數(shù)據(jù)檢測(cè)) 查看演示
以下是代碼:

<div id="book_store">
    <table>
        <thead><tr><td>書(shū)名</td><td>作者</td><td>價(jià)格</td><td>操作</td></tr></thead>
        <tbody>
            <tr v-for="item in list">
                <td>{{ item.book_name }}</td>
                <td>{{ item.author }}</td>
                <td>{{ item.price }}</td>
                <td><button v-on:click="removeBook($index)">刪除</button></td>
            </tr>
        </tbody>
    </table>
    <div>
        <h3>添加書(shū)籍</h3>
        <p><label>書(shū)名<input type="text" v-model="new_book.book_name"></label></p>
        <p><label>作者<input type="text" v-model="new_book.author"></label></p>
        <p><label>價(jià)格<input type="text" v-model="new_book.price"></label></p>
        <button v-on:click="addBook">添加</button>
    </div>
</div>
    
<script type="text/javascript" src="vue.js"></script>
<script type="text/javascript">
    new Vue({
        el: '#book_store',

        data: {
            new_book: null,
            list: []
        },

        methods: {
            addBook: function() {
                var book_name = this.new_book.book_name.trim(),
                    author = this.new_book.author.trim(),
                    price = this.new_book.price.trim();

                if(book_name && author && price) {
                    var book = {
                        book_name: book_name,
                        author: author,
                        price: price
                    }
                    this.list.push(book);
                    this.new_book = null;
                }               
            },

            removeBook: function(index) {
                this.list.splice(index, 1);
            }
        }
    });
</script>

運(yùn)行上面代碼會(huì)有警告,如圖

這是因?yàn)樵赿ata里我將new_book設(shè)置為了null礁遣,因此瀏覽器在渲染頁(yè)面的時(shí)候在data里找不到new_book.book_name等屬性斑芜,于是程序替我們創(chuàng)建了這些對(duì)象屬性并給出了警告。一個(gè)警告貌似無(wú)關(guān)緊要祟霍,但是在使用變量/屬性前最好將它初始化杏头。

關(guān)鍵字符:new Vue()、data沸呐、methods醇王、v-*、{{}}

上面命名方式有點(diǎn)不一致崭添,以后我將統(tǒng)一將變量使用下劃線_連接寓娩,函數(shù)命名使用駝峰形式。這樣名稱既清晰又能區(qū)別函數(shù)與變量滥朱。

在下一篇我會(huì)提一點(diǎn)響應(yīng)式相關(guān)的東西根暑。先簡(jiǎn)單介紹下,在使用new Vue(options)創(chuàng)建Vue對(duì)象的過(guò)程中徙邻,會(huì)vue.js遍歷該對(duì)象的data對(duì)象屬性排嫌,并將它們轉(zhuǎn)換為getter/setter以實(shí)現(xiàn)動(dòng)態(tài)跟蹤。而data對(duì)象也會(huì)從一個(gè)普通對(duì)象變成一個(gè)下面這種形式的對(duì)象:


由于構(gòu)建data對(duì)象的過(guò)程設(shè)計(jì)一系列復(fù)雜的操作缰犁,所以后續(xù)如果直接使用data.property給data添加屬性淳地,這個(gè)屬性并不會(huì)觸發(fā)視圖更新,因?yàn)樗鼪](méi)有被轉(zhuǎn)換為getter/setter帅容。如圖:


那么后續(xù)我們?nèi)绾谓odata添加新的觸發(fā)視圖更新的屬性呢颇象?后面會(huì)從Vue的源碼中找答案。

(Vue的API提供了豐富的方法供我們使用)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末并徘,一起剝皮案震驚了整個(gè)濱河市遣钳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌麦乞,老刑警劉巖蕴茴,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異姐直,居然都是意外死亡倦淀,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門声畏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)撞叽,“玉大人,你說(shuō)我怎么就攤上這事≡钙澹” “怎么了科展?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)初斑。 經(jīng)常有香客問(wèn)我辛润,道長(zhǎng),這世上最難降的妖魔是什么见秤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任砂竖,我火速辦了婚禮,結(jié)果婚禮上鹃答,老公的妹妹穿的比我還像新娘乎澄。我一直安慰自己,他們只是感情好测摔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布置济。 她就那樣靜靜地躺著,像睡著了一般锋八。 火紅的嫁衣襯著肌膚如雪浙于。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天挟纱,我揣著相機(jī)與錄音羞酗,去河邊找鬼。 笑死紊服,一個(gè)胖子當(dāng)著我的面吹牛檀轨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播欺嗤,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼参萄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了煎饼?” 一聲冷哼從身側(cè)響起讹挎,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吆玖,沒(méi)想到半個(gè)月后筒溃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衰伯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了积蔚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片意鲸。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怎顾,到底是詐尸還是另有隱情读慎,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布槐雾,位于F島的核電站夭委,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏募强。R本人自食惡果不足惜株灸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望擎值。 院中可真熱鬧慌烧,春花似錦、人聲如沸鸠儿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)进每。三九已至汹粤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間田晚,已是汗流浹背嘱兼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肉瓦,地道東北人遭京。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像泞莉,于是被迫代替她去往敵國(guó)和親哪雕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理鲫趁,服務(wù)發(fā)現(xiàn)斯嚎,斷路器,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容挨厚,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容堡僻。關(guān)于...
    云之外閱讀 5,046評(píng)論 0 29
  • Vue 實(shí)例 屬性和方法 每個(gè) Vue 實(shí)例都會(huì)代理其 data 對(duì)象里所有的屬性:var data = { a:...
    云之外閱讀 2,204評(píng)論 0 6
  • 源碼: https://github.com/ZH4L/vue-psyvue文檔:https://cn.vuejs...
    逗比二二二閱讀 3,010評(píng)論 3 0
  • 早,親愛(ài)的16樓我來(lái)了疫剃。 晚钉疫,步行5公里左右 努力?思考?付出
    麗麗我我閱讀 152評(píng)論 0 0