Vue 2 のオートコンプリート コンポーネント。vue-autocomplete に基づいています。ライブデモはこちらから!
このように vue2-autocomplete.vue を vue コンポーネント ファイルにインポートし、プリプロセッサで処理できます。
NPM経由でインストールできます
npm install vue2-autocomplete-js
または、Vue JS の後に置くだけです~
< script src =" https://vuejs.org/js/vue.min.js " > </ script >
< script src =" ./dist/vue2-autocomplete.js " > </ script >
< script >
// Don't Forget to register it
new Vue ( {
components : {
autocomplete : Vue2Autocomplete
}
} ) ;
</ script >
vue 2 CSS をインポートすることを忘れないでください。 html経由でリンクできます
< link rel =" stylesheet " href =" vue2-autocomplete-js/dist/style/vue2-autocomplete.css " >
または、commonJS を使用してインポートできます
require ( 'vue2-autocomplete-js/dist/style/vue2-autocomplete.css' )
そのスタイルは非常にカスタマイズ可能です。任意の CSS をその上に置くことができます。そして、そのプロパティを介してカスタムクラスを追加できます。
import Autocomplete from 'vue2-autocomplete-js'
// Or
var Autocomplete = require ( 'vue2-autocomplete-js' ) ;
< template >
< autocomplete
url =" http://localhost/proyek/goodmovie/api/api/v1/search "
anchor =" title "
label =" writer "
:on-select =" getData " >
</ autocomplete >
</ template >
< script >
import Autocomplete from 'vue2-autocomplete-js' ;
export default {
components : { Autocomplete } ,
methods : {
getData ( obj ) {
console . log ( obj ) ;
}
}
} ;
</ script >
利用可能な小道具
< template >
< autocomplete
url =" http://localhost/proyek/goodmovie/api/api/v1/search "
anchor =" title "
label =" writer "
:onSelect =" getData "
:customParams =" { token: 'dev' } "
:customHeaders =" { Authorization: 'bearer abc123' } "
:required =" true "
id =" custom id "
className =" custom class name "
:classes =" { wrapper: 'form-wrapper', input: 'form-control', list: 'data-list', item: 'data-list-item' } "
placeholder =" placeholder "
:initValue =" initial value "
:options =" [] "
:min =" 3 "
:debounce =" 2000 "
:filterByAnchor =" true "
:encodeParams =" true "
:onShouldGetData =" getData "
:onInput =" callbackEvent "
:onShow =" callbackEvent "
:onBlur =" callbackEvent "
:onHide =" callbackEvent "
:onFocus =" callbackEvent "
:onSelect =" callbackEvent "
:onBeforeAjax =" callbackEvent "
:onAjaxProgress =" callbackEvent "
:onAjaxLoaded =" callbackEvent "
:onShouldRenderChild =" renderChild "
>
</ autocomplete >
</ template >
URL はアクティブである必要があります (ファイルからではありません)。コンポーネントはこの URL から JSON を取得し、1 つの params (デフォルト: q
) クエリを渡します。のように:
http://some-url.com/API/list?q=
コンポーネント内にはフィルターや制限アクションはありません。したがって、API ロジックでそれを実行します。
Ajax 呼び出しでクエリする検索パラメータの名前。デフォルトはq
です
検索クエリを実行する前の最小入力文字数。デフォルトは0
です
これは、候補リストのアンカーに使用されるオブジェクト プロパティ パスです。例のanchor="name"
JSONオブジェクトのnameプロパティを取得します。上のデモの(「バンバン」、「スキジャン」、「ベジョ」)のように。あるいは、オブジェクトの深い価値に到達することもできます。 anchor="geometry.location.lat"
のように
アンカーと同じですが、リストのサブタイトルまたは説明に使用されます。
リスト オプションの配列をオートコンプリートに手動で渡します。
オプションの小道具を使用している場合、オートコンプリートを使用してデータをフィルターできます。または、オートコンプリートのフィルターを使用せずにデータを直接表示することもできます。オプションはアンカーによってフィルターされ、ユーザーの入力に従ってフィルターされます。
Autocomplete は、この props がtrue
に設定されている場合、Ajax 送信前にすべてのパラメーターencodeURIComponent
します。デフォルトはtrue
#35
データに対して ajax を実行するまでの遅延時間
入力に必須の属性
入力用のプレースホルダー
オートコンプリートコンポーネントのカスタムクラス名
各パーツの特定のカスタム クラス。利用可能: ラッパー、入力、リスト、アイテム
オートコンプリートコンポーネントのカスタムID名
リクエストが送信される前にユーザーが入力を停止する必要があるミリ秒数。デフォルトは 0 で、すべてのリクエストが即時に送信されることを意味します。
APIの結果を処理する関数。エントリの配列、またはプロパティを列挙できるオブジェクトを返す必要があります。
各結果を処理する関数。 API 応答要素のタイプを受け取り、HTML データを返す必要があります。
小道具を介してコールバック イベントを作成できます。
オートコンプリートの入力イベント時
オートコンプリート リストにイベントを表示するとき
オートコンプリートがぼやける場合
オートコンプリートリストが非表示の場合
フォーカスモードでのオートコンプリート入力時
ユーザーがリスト内の項目を 1 つ選択したとき
ajax送信前
ajaxがデータを取得している間
ajaxプロセスが完全にロードされたとき
ajax プロセス全体を手動で処理します。 Promise の場合は、オートコンプリートのリストのオプションを解決する必要があります。 Promise ではない場合は、オートコンプリートの props にオプションを手動で渡すことができます。
< autocomplete
anchor =" formatted_address "
label =" formatted_address "
:onShouldGetData =" getData "
>
</ autocomplete >
methods: {
promise ( value ) {
return new Promise ( ( resolve , reject ) => {
let ajax = new XMLHttpRequest ( ) ;
ajax . open ( 'GET' , `https://maps.googleapis.com/maps/api/geocode/json?address= ${ value } ` , true ) ;
// On Done
ajax . addEventListener ( 'loadend' , ( e ) => {
const { responseText } = e . target
let response = JSON . parse ( responseText ) ;
// The options to pass in the autocomplete
resolve ( response . results )
} ) ;
ajax . send ( ) ;
} )
} ,
nonPromise ( ) {
getData ( value ) {
let ajax = new XMLHttpRequest ( ) ;
ajax . open ( 'GET' , `https://maps.googleapis.com/maps/api/geocode/json?address= ${ value } ` , true ) ;
// On Done
ajax . addEventListener ( 'loadend' , ( e ) => {
const { responseText } = e . target
let response = JSON . parse ( responseText ) ;
// The options to pass in the autocomplete props
this . options = response . results ;
} ) ;
ajax . send ( ) ;
} ,
}
}
結果配列を取得する前に結果を処理します。オートコンプリートに渡される前に、ここでデータを整形できます。
リストにカスタム テンプレートを使用したいですか?さあ、できるよ!
< autocomplete
anchor =" formatted_address "
label =" formatted_address "
:onShouldRenderChild =" renderChild "
>
</ autocomplete >
methods: {
renderChild ( data ) {
return `
<img src=" ${ data . src } " />
<span> ${ data . something } </span>
`
} ,
}
JavaScript を介してコンポーネントにアクセスすることで、いくつかのメソッドを実行できます。
this . $refs . autocomplete . someMethod ( )
オートコンプリート入力の値を設定するには
下記までご連絡ください:
MIT 著作権 (c) 2016 - 永遠に Naufal Rabbani