iT邦幫忙

0

Vue實例data裝資料的小問題..

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20191218/20122813XguRPoOABV.jpg
若是DATA想同時放dataObserved跟optionsData這兩個物件,要怎麼寫比較好..哈哈。
謝謝各位資深大佬!

因為我不想這寫成下面這樣
https://ithelp.ithome.com.tw/upload/images/20191218/20122813788gc88SFa.jpg

另外再請教一下是否可以console出我選到的key而不是value?

請教
froce iT邦大師 1 級 ‧ 2019-12-18 16:37:05 檢舉
不太建議這樣擺,vue把他用data包起來是有含意的,你放在超出vue instance scope的地方,就要自己承擔,尤其是你在用components的時候。
容易造成下面提到狀況。
https://cn.vuejs.org/v2/guide/components.html#%E7%BB%84%E4%BB%B6%E7%9A%84%E5%A4%8D%E7%94%A8
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
listennn08
iT邦高手 5 級 ‧ 2019-12-18 15:39:10
最佳解答

直接放進去
跟你下面那張照片一樣 括號括起來就可以了

data () {
    return {
        dataObserved,
        optionsData,
    }
}
看更多先前的回應...收起先前的回應...

大大 兩個都試了不行耶

你的物件是全域變數嗎
或是你也可以寫成

data () {
    return {
        dataObserved: {
            ...
        },
        optionsData: {
            ...
        },
    }
}

https://ithelp.ithome.com.tw/upload/images/20191218/201228133w8IbxE5Wb.jpg
https://ithelp.ithome.com.tw/upload/images/20191218/20122813tC3wH6hBOV.jpg

你要用的話要

this.dateObserved.textInputed

你用 js 使用物件也是這樣的語法吧

另外再請教一下是否可以console出我選到的key而不是value?

你用 js 使用物件也是這樣的語法吧

嗯嗯這我知道 console那邊沒問題 現在我就只是想把外面包好的幾個data變數一起送到vue中的data 不然看起來很亂 我是新手請見諒..

另外再請教一下是否可以console出我選到的key而不是value?

function getKeyByValue(object, value) { 
    return Object.keys(object).find(key => object[key] === value)
}

你可以放在 vue 前面
然後

console.log(getKeyByValue(this.dataObserved, this.dataObserved.textInputed))
3
dragonH
iT邦超人 5 級 ‧ 2019-12-18 15:58:36

codepen

const obj1 = {
  name: 'dragonH'
};

const obj2 = {
  name: 'ithelp'
};

const vm = new Vue({
  el: '#app',
  data() {
    return {
      obj1,
      obj2,
    }
  }
});
看更多先前的回應...收起先前的回應...

https://ithelp.ithome.com.tw/upload/images/20191218/201228132aCQ4sbAzi.jpg
https://ithelp.ithome.com.tw/upload/images/20191218/20122813iiTMgAmXVs.jpg

dragonH iT邦超人 5 級 ‧ 2019-12-18 16:14:24 檢舉

ofcourse448

你怎麼去 call 值的

我 codepen 有補上了在 vue 外取值

https://ithelp.ithome.com.tw/upload/images/20191218/201228136wCIj65VvZ.jpg
我原本寫得沒問題啊 有東西

https://ithelp.ithome.com.tw/upload/images/20191218/20122813MvBjTjMBgM.jpg
選到但還是取不了..

看不懂哈哈 我要放在哪去取他的KEY?

dragonH iT邦超人 5 級 ‧ 2019-12-18 16:24:47 檢舉

貼個完整的 code 才知道妳問題在哪唷

然後請貼文字

"生氣" /images/emoticon/emoticon25.gif

你的 v-model 也要改/images/emoticon/emoticon06.gif

dragonH iT邦超人 5 級 ‧ 2019-12-18 16:47:26 檢舉

你的 v-model 也要改

然後你要看值

應該是寫一個 change handler 吧

codepen

抱歉只能給一個最佳解答 還是謝謝大哥指教哈哈

2
marlin12
iT邦研究生 5 級 ‧ 2019-12-18 18:52:04

這個跨組件的狀態管理問題,vue官網早已提及。
簡單狀態管理起步使用
vuex狀態管理

codepen

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Vue state management</title>
</head>

<body>
  <div id='app'>
    <select v-model="selected">
      <option v-for="(option, idx) in options" :key="idx">{{option}}</option>
    </select>
    <hr/>
    <input type="text" v-model="textInputed">
  </div>

  <script src="https://unpkg.com/vue/dist/vue.js"></script>

  <script>
    const dataObserved = {
      textInputed: '',
      selected: '',
      setTextInputed (val) {
        textInputed = val;
        console.log('textInputed = ' + textInputed);
      },
      setSelected (val) {
        selected = val;
        console.log('selected = ' + selected);
      }
    }

    const optionsData = {
      options: [ '生氣', '開心', '憤怒', '平淡' ]
    }

    const vm = new Vue({
      el: '#app',
      data: {
        textInputed: dataObserved.textInputed,
        selected: dataObserved.selected,
        options: optionsData.options
      },
      watch: {
        selected: val => dataObserved.setSelected( val ),
        textInputed: val => dataObserved.setTextInputed( val )
      },
    })
  </script>
</body>
</html>

抱歉只能給一個最佳解答 還是謝謝大哥指教哈哈

我要發表回答

立即登入回答