2017-10-05 10 views
-1

Vue.js Javascriptの壁に当たった。Vue.jsの最後のオブジェクトの属性にアクセスする

は、ここに私のコードです:物事のため

<div id="app"> 
    <h1>Things</h1> 
    <div v-for="thing in things"> 
    <input v-model="thing.val"> 
    </div> 
    <button @click="addThing"> 
    NewThing 
    </button> 
    <pre>{{ $data | json }}</pre> 
</div> 
new Vue({ 
    el: '#app', 
    data: { 
    things: [], 
    things2: [], 
    things3: [], 
    things4: [] 
    }, 
    methods: { 
    addFind: function() { 
     this.things.push({ val: '' }); 
     var l = this.things[this.things.length-1]; 
     this.things2.push(l); 
     this.things3.push(l.val); 
     this.things4.push(l["val"]); 
    } 
    } 
}); 

出力と期待通りthings2は結構ですと。 things3とthings4の出力が期待通りではありません。 配列内のオブジェクトの「val」キーにアクセスできません。私はJavascriptオブジェクトの専門家ではありませんが、これはうまくいくはずですか?私は何が欠けていますか? 「val」にアクセスするにはどうすればいいですか?

出力:https://jsfiddle.net/rcLgmv18/3/

UPDATE:ここ

{ 
    "things": [ 
    { 
     "val": "first" 
    }, 
    { 
     "val": "second" 
    }, 
    { 
     "val": "" 
    } 
    ], 
    "things2": [ 
    { 
     "val": "first" 
    }, 
    { 
     "val": "second" 
    }, 
    { 
     "val": "" 
    } 
    ], 
    "things3": [ 
    "", 
    "", 
    "" 
    ] 
} 

はデモである「」:これは、いくつかの理由で、オブジェクトが{valを持つ配列の最後であることが今明らかです}。 (length-1)の代わりに、私が(length-2)するなら、私は望ましい振る舞いを得ます。問題は、val = ""の最後のオブジェクトの種類がなぜ奇妙なのでしょうか?それはVue.jsかJavascriptの機能ですか?

+3

あなたは配列の最後の項目の 'val'プロパティにアクセスしています。そのプロパティの値は空文字列 '' ''で、 'things3'にプッシュされます。 – thanksd

+0

'this.things'はオブジェクトの配列で、' l'は 'this.things'の最後の要素なので、キー' val'のオブジェクトです。 'l.val'は空文字列を与えます。正常と思われる。あなたは何を期待していますか? – Psidom

+0

@thanksdあなたは最高です!しかし、なぜ最後の要素は空ですか?私はそれを得ることはありません... – Chikipowpow

答えて

0

私は@JamesWescが最も良い説明を与えたと思います。私は...変数のカップルがより明確に私はあなたが後にしていると思うかを説明するために名前を変更、私は2つを追加したときに私は、この出力を与える

new Vue({ 
    el: '#app', 
    data: { 
    finds: [], 
    lastFind: {}, 
    lastFindVal: '' 
    }, 
    methods: { 
    addFind: function() { 
     this.finds.push({ val: '' }); 
     this.lastFind = this.finds[this.finds.length-1]; 
     this.lastFindVal = typeof this.lastFind.val; 
    } 
    } 
}); 

を少しいじってきた入力ボックスは、入力し「検索します」最初は「ab」、2番目は「cd」です。

{ 
    "finds": [ 
    { 
     "val": "ab" 
    }, 
    { 
     "val": "cd" 
    } 
    ], 
    "lastFind": { 
    "val": "cd" 
    }, 
    "lastFindVal": "string" 
} 

私は出力"cd"lastFindValを得ることができない理由を私はかなり把握することはできませんが、私はVueの開発者ではありませんよ。あなたはそれが文字列であることを見ることができ、空の文字列であるように見えます。したがって、@ JamesWescは正しい軌道にあるようです。フレームワークとは何か関係がありますか? IDK

関連する問題