私のプロジェクトでは、アンギュラマテリアルコンポーネント "md-autocomplete"を使用しています。アンギュラマテリアルmdオートコンプリートダイナミックローディングの問題
"md-list"コンポーネントのitem-clickのイベントコールから得られる動的応答をレンダリングしようとしています。
問題:ただし、イベントコールが呼び出される前に、md-autocompleteメソッドが呼び出されます。
私の要件: md-autocompleteメソッドを呼び出す前にイベントコールを呼び出す方法はありますか?
サンプル画像を添付しました。出力として必要な基本的な応答です。
私はコードの下に試してみました、しかし、それは動作しません。私は問題の解決策が必要です。
HTMLソースコード:
MD-リストコード
<md-list>
<div ng-repeat="object in ['object 1', 'object 2', 'object 3', 'object 4', 'object 5', 'object 6'] track by $index">
<md-list-item class="md-2-line contact-item" ng-click="listItemClick($event, object)">
<div class="md-list-item-text compact">
<h3>Object data displayed here like object 1, object 2 and etc ...</h3>
</div>
</md-list-item>
</div>
</md-list>
MD-オートコンプリートコード:
<md-autocomplete
ng-disabled="isDisabled"
md-no-cache="noCache"
md-selected-item="selectedItem"
md-search-text-change="searchTextChangeEvent(searchText)"
md-search-text="searchText"
md-selected-item-change="selectedItemChangeEvent(item)"
md-items="item in search(searchText)"
md-item-text="item.id"
md-min-length="0"
placeholder="Search by id ..."
md-menu-class="autocomplete-custom-template">
<md-item-template>
<span class="item-title">
{{id}}
</span>
</md-item-template>
</md-autocomplete>
AngularJSスクリプトコード:
(function() {
var app = angular.module('module-name');
var controller = function($scope, $rootScope,$http, $timeout, $q, $log) {
var self = this;
self.simulateQuery = false;
self.isDisabled = false;
$rootScope.objectName = "object 1";
self.response = loadValues($rootScope.objectName);
self.search = search;
self.selectedItemChangeEvent = selectedItemChangeEvent;
self.searchTextChangeEvent = searchTextChangeEvent;
// ******************************
// Internal methods
// ******************************
/**
* Search for repos... use $timeout to simulate
* remote dataservice call.
*/
function search (query) {
var results = query ? self.response.filter(createQueryFilterFor(query)) : self.response,
deferred;
if (self.simulateQuery) {
deferred = $q.defer();
$timeout(function() { deferred.resolve(results); }, Math.random() * 1000, false);
return deferred.promise;
} else {
return results;
}
}
function searchTextChangeEvent(text) {
$log.info('Text changed to ' + text);
}
function selectedItemChangeEvent(item) {
$log.info('Item changed to ' + JSON.stringify(item));
}
/**
* Build `components` list of key/value pairs
*/
function loadValues(name) {
var dynamicData = '';
if(name === "object 1") {
dynamicData = [{
"id": 1,
"name": "some name here"
},{
"id": 2,
"name": "some name here"
}];
} else if(name === "object 2") {
dynamicData = [{
"id": 3,
"name": "some name here"
},{
"id": 4,
"name": "some name here"
}];
} else if(name === "object 3") {
dynamicData = [{
"id": 5,
"name": "some name here"
},{
"id": 6,
"name": "some name here"
}];
}
return dynamicData.map(function (response) {
response.value = response.id.toLowerCase();
return response;
});
}
/**
* Create filter function for a query string
*/
function createQueryFilterFor(query) {
var lowercaseQuery = angular.lowercase(query);
return function filterFn(item) {
return (item.value.indexOf(lowercaseQuery) === 0);
};
}
$scope.listItemClick = function(event, object) {
$rootScope.objectName= object.someFiledName; // It will give md-list-item name (like object 1 or object 2 and etc ...)
self.response = loadValues($rootScope.name);
}
};
app.controller("controller", controller)
}());
idで検索すると、idとそれぞれの値に対して 'loadValues'関数を参照できます。質問ごとに、それが予想される動作です。 –
問題はこのように思われます。自動完成フィールドをクリックすると、md-list(ボタン)内の要素にアクセスできなくなります。ホバリングを試してみると、自動完成ドロップダウンリストが表示されたmd-listで、ホバリングが通常のようにリスト要素の背景を変更しないことがわかります。これで、ユーザーは2回クリックする必要があります.1回はオートコンプリートフィールドから出て、2回目はリストアイテムを選択します。 – Jay