【发布时间】:2015-11-12 08:34:19
【问题描述】:
我有两个 Angular-Material 自动完成字段添加为 shown here,到目前为止它运行良好。
自动完成代码:
HTML:
<form ng-submit="$event.preventDefault()">
<md-autocomplete
ng-disabled="ctrl.isDisabled"
md-no-cache="ctrl.noCache"
md-selected-item="ctrl.selectedItem"
md-search-text-change="ctrl.searchTextChange(ctrl.searchText2)"
md-search-text="ctrl.searchText2"
md-selected-item-change="ctrl.selectedItemChange(item)"
md-items="item in ctrl.querySearch(ctrl.searchText2)"
md-item-text="item.display"
md-min-length="1"
md-floating-label="Destination"
ng-model="destiFlight">
<md-item-template>
<span md-highlight-text="ctrl.searchText" md-highlight-flags="^i">{{item.display}}</span>
</md-item-template>
<md-not-found>
No states matching "{{ctrl.searchText}}" were found.
</md-not-found>
</md-autocomplete>
</form>
JS:
.controller('someCtrl', someCtrl);
function someCtrl($timeout, $q, $log) {
var self = this;
self.simulateQuery = false;
self.isDisabled = false;
// list of `state` value/display objects
self.states = loadAll();
self.querySearch = querySearch;
self.selectedItemChange = selectedItemChange;
self.searchTextChange = searchTextChange;
self.newState = newState;
function newState(state) {
alert("Sorry! You'll need to create a Constituion for " + state + " first!");
}
// ******************************
// Internal methods
// ******************************
/**
* Search for states... use $timeout to simulate
* remote dataservice call.
*/
function querySearch(query) {
var results = query ? self.states.filter(createFilterFor(query)) : self.states,
deferred;
if (self.simulateQuery) {
deferred = $q.defer();
$timeout(function () {
deferred.resolve(results);
}, Math.random() * 1000, false);
return deferred.promise;
} else {
return results;
}
}
function searchTextChange(text) {
$log.info('Text changed to ' + text);
}
function selectedItemChange(item) {
self.selectedItem3=item;
$log.info('Item changed to ' + JSON.stringify(item));
}
/**
* Build `states` list of key/value pairs
*/
function loadAll() {
var allStates = 'Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware,\
Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana,\
Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana,\
Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina,\
North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina,\
South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia,\
Wisconsin, Wyoming';
return allStates.split(/, +/g).map(function (state) {
return {
value: state.toLowerCase(),
display: state
};
});
}
/**
* Create filter function for a query string
*/
function createFilterFor(query) {
var lowercaseQuery = angular.lowercase(query);
return function filterFn(state) {
return (state.value.indexOf(lowercaseQuery) === 0);
};
}
};
现在我在两个字段下方添加了一个 div,如下所示:
<div class="someDiv">
....
</div>
只有从自动完成下拉菜单中选择了一个值,我才能显示 div?
【问题讨论】:
-
您是否尝试过使用
ng-show并将其设置为选定的值?您需要展示更多您所做的事情,以便全面了解哪些事情对您不起作用。 -
另一种方式可以是
$watch。设置一个标志说“来源”并在更改时检查并相应地处理它。 -
@Rajesh $watch 是如何工作的?我还在学习角度,所以请不要介意菜鸟问题。
-
@Andrew,没关系。 $watch 是变量的观察者。每当您的变量值发生变化时,它都会触发一个事件。此活动还使您可以访问旧值和新值。 $watch 的好处是,如果您的变量值从代码本身更改,仍然会触发此事件,因此您不必触发任何事件
-
@Rajesh 哦,我明白了。如何使用它进行自动完成?
标签: javascript angularjs autocomplete angular-material