vue日志之如何用select選中默認值
如何用select選中默認值
在寫這個問題之前也查閱瞭網上很多種答案,下面我來說一下幾種不可行的方式以及可行的方式。
幹貨來瞭。
先貼一下view和model
<div class="item"> <p class="top"> <span>推廣物:</span> <select v-model="detail.aid"> <option :value="item.id" v-for="item in accountList" :key="item.id">{{item.name}}</option> </select> </p> <h6 class="bottom">選擇推廣任務的公眾號</h6> </div>
data() { return { detail: { aid: 0, }, accountList: [], ... }; }, methods: { getAccountList() { //獲取公眾號 this.$fetch(`/popularize/account/list/2`).then(response => { if (response.errorCode == 0) { let data = response.data; this.accountList = data; } }); }, }
先說下網上的第1種
mounted() { ... this.getAccountList(); document.getElementsByTagName('select').selectIndex = 0 // console.log('sid',document.getElementsByTagName('select').selectIndex ) },
這種方式隻操作瞭dom,沒有操作數據,selectIndex是可以打印出來的。但是在vue中並沒有作用。
第2種
created () { // select初始化 this.detail.aid = this.accountList[0].id; //默認選中第一項 },
有人把這個id初始化放在mounted, 也有人放在created其實並沒有太大的區別,created時就可以獲取的到後端傳來的數據瞭。所以這裡你created和mounted一樣的。那麼這個時候就會報一個錯:
[Vue warn]: Error in mounted hook: "TypeError: Cannot read property 'id' of undefined"
found in …
這個時候大傢就會迷茫,為什麼id會變成undefined呢,這裡的id是指detail還是accountList裡的id,那麼我們去看data裡面是否有定義,沒有就給他初始化一下,當然,你以為這個時候好瞭,其實並沒有。為什麼呢,因為你console.log(this.accountList)一下,會發現它是空數組,有人說我mounted裡面已經調用this.getAccountList( )方法瞭,然後在下面在寫一個this.detail.aid = this.accountList[0].id;就好瞭。
其實不是的,當你獲取這個方法的時候,頁面隻能做一件事,就是獲取這個列表,並不能同時把id賦值給列表的某項。所以這個時候我們需要做的是,請求這個接口時就賦值,在created或者mounted裡初始化,那麼我們來改造一下這段代碼:
mounted() { // select初始化 this.$fetch(`/popularize/account/list/2`).then(response => { if (response.errorCode == 0) { let data = response.data; this.accountList = data; this.detail.aid = this.accountList[0].id; //默認選中第一項 初始化 } }); },
上面我們說過瞭從後臺拿到的數據給他賦值,如果是我們自己定義的數據呢,那就更簡單瞭。接下來
第3種,先貼自定義數據
<p class="top"> <span>廣告限量模式:</span> <select v-model="detail.mode"> <option :value="0">全選</option> <option :value="1">每日限量廣告</option> <option :value="2">不限量廣告</option> </select> </p>
這個時候我們把後端綁定的字段mode的值設置為第一項的option的value就行,在data中初始化就可以瞭。
data() { return { detail: { ... aid: 0, mode: 0, }, }
到此已寫清瞭從前端和後端怎樣設置第一項為默認值。
vue select js 設置默認值
這個地方我是用vue進行渲染的select
對於每個選項如下
<div id="companylist"> <label>所屬公司</label> <select class="form-control" id="companyid" v-model="couponSelected" @change='getCompanyId($event)'> <option v-for="(item,index) in data" v-bind:value=item.id>{{item.companyname}} </option> </select> </div>
execFunc("company.getcompanylist", {}, function(result) { var vucom = new Vue({ el : '#companylist', data : { data : [] }, created(){ //默認值渲染必須 this.couponSelected = hcompanyid; }, methods : { getCompanyId : function(event) { $("#companyid").val(event.target.value); } } }); vucom.data = result.data; })
execFunc是我自己封裝的一個ajax請求
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Vue設置select下拉框的默認選項詳解(select空白bug解決)
- VUE多個下拉框實現雙向聯動效果
- vue中keep-alive組件的用法示例
- vue+elementUI下拉框回顯問題及解決方式
- element-ui之解決select無法回顯的問題