ホームページ >ウェブフロントエンド >Vue.js >vuejsで検索ボックスを実装する方法
vuejs で検索ボックスを実装する方法: 1. ロゴと検索ボックス部分のコンポーネントを作成します; 2. 新しい空の Vue オブジェクトを作成します; 3. "bus.$emit("change",index を使用します) );" イベントをトリガーしてパラメータを渡すだけです。
この記事の動作環境: Windows 7 システム、vue バージョン 2.9.6、DELL G3 コンピューター。
vuejs で検索ボックスを実装するにはどうすればよいですか?
Vue.js をベースにしたシンプルな検索ボックスの実装
github で演習を拝見しました。コードを読んだ後、自分でもう一度練習してください。元のアドレスを先にします: https://github.com/lavyun/vue-demo-search
使用する主な知識は非常に単純で、vuejs2.0 の簡単な知識で十分です。ソースコードはビルドに .vue を使用し、ES6、webpack パッケージ化などを使用します。私はまだ経験が浅いので、最初は簡単な .js を使用して記述します。
最初にエフェクトを見てください
ここには 2 つのコンポーネントがあり、1 つはロゴ部分、もう 1 つは検索ボックス部分です。
html
html は非常にシンプルで、2 つのコンポーネントを参照するだけです。
<p id="app"> <logo-picture></logo-picture> <search-panel></search-panel> </p> //js还要实例#app var app = new Vue({ el: "#app" })
logo
まずは分析しましょう。まず、6ed09268cbdd0015bce8dcbbdfa9bfe4 に検索エンジンの画像が表示されます。以下で別の検索エンジン アイコンを選択した場合は、それに応じてアイコンを変更する必要があります。したがって、e431342b2894783f54b33740f33c93c1 となります。背面の逆三角形をクリックすると、ドロップダウン リスト914942ce123cf770f7ea92723ad87555 54bdf357c58b8a65c66d7c19c8e4d114が表示されます。
次に、ドロップダウン ボックスがあります。トランジション効果を持たせたい場合は、それを 94f430a825ee74add2acae614af18c98 ドロップダウン リストに似ています。
検索する場合、主に $http.jsonp を使用し、ES6 構文も使用しますか?フォールバックは Promise の .then() のようです。
Vue.component('search-panel',{ template:'\ <p class="search-input">\ <input v-model="search" @keyup="get($event)" @keydown.enter="searchInput()" @keydown.down="selectDown()" @keydown.up.prevent="selectUp()"/>\ <span @click="clearInput()" class="search-reset">×</span>\ <button @click="searchInput()" class="search-btn">搜一下</button>\ <p class="search-select">\ <transition-group tag="ul" mode="out-in">\ <li v-for="(value,index) in myData" :class="{selectback:index==now}" :key="index" @click="searchThis" @mouseover="selectHover(index)" class="search-select-option search-select-list">\ {{value}}\ </li>\ </transition-group>\ </p>\ </p>', data: function() { return { search: '', myData: [], flag: 0, now: -1, logoData: [ { 'name': "360搜索", searchSrc: "https://www.so.com/s?ie=utf-8&shb=1&src=360sou_newhome&q=" }, { 'name': "百度搜索", searchSrc: "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=" }, { 'name': "搜狗搜索", searchSrc: "https://www.sogou.com/web?query=" } ] } }, methods: { get: function(event) { if(event.keyCode == 38 || event.keyCode == 40){ //向上向下 return ; } this.$http.jsonp('https://sug.so.360.cn/suggest?word=' + this.search + '&encodein=utf-8&encodeout=utf-8').then(function(res) { this.myData = res.data.s; }, function() { }); }, //清除内容 clearInput: function() { this.search = ''; this.get(); }, //搜索 searchInput: function() { alert(this.flag) window.open(this.logoData[this.flag].searchSrc+this.search); }, //搜索的内容 searchThis: function(index) { this.search = this.myData[index]; this.searchInput(); }, //li hover selectHover: function(index) { this.search = this.myData[index]; this.now = index; }, //向下 selectDown: function() { this.now++; if(this.now == this.myData.length) { this.now = 0; } this.search = this.myData[this.now]; }, //向上 selectUp: function() { this.now--; if(this.now == -1) { this.now = this.myData.length - 1; } this.search = this.myData[this.now]; } }, created: function() { //通信 var self = this; bus.$on('change',function(index) { self.flag = index; }) } })
2 つの兄弟コンポーネント間の通信の問題
fd098b03a0046905b4f34a14f2cba3c4検索エンジンを変更する場合、04a43090e6cbf1462a77fdb864c1f813 を次のように置き換える必要があります。対応する検索エンジン。 2 つのコンポーネントは親子関係にないため、ここでは中間として新しい空の Vue オブジェクトを作成する必要があります。
var bus = new Vue(); //logo-picture里触发事件,并传递参数 bus.$emit("change",index); //search-panel里监听事件是否发生 var self = this; bus.$on('change',function(index) { self.flag = index; })
ここでこの問題に注意してください。$on のこれはバスを指しているため、これを参照検索パネルに保存する必要があります。
推奨される学習: 「vue チュートリアル#」 ##"
以上がvuejsで検索ボックスを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。