Javascript 角材质自动完成不工作
我试图使用angular material的autocomplete指令。我已尝试从中实现该示例 但我一开始键入,就得到Javascript 角材质自动完成不工作,javascript,angularjs,angularjs-directive,autocomplete,Javascript,Angularjs,Angularjs Directive,Autocomplete,我试图使用angular material的autocomplete指令。我已尝试从中实现该示例 但我一开始键入,就得到TypeError:无法读取未定义的属性“success” 角度代码: var spApp = angular.module('helpApp', ['ui.bootstrap', 'angular-edit-row', 'ui-notification', 'uiSwitch', 'ngMaterial']) spApp.controller('helpListCtrl'
TypeError:无法读取未定义的属性“success”
角度代码:
var spApp = angular.module('helpApp', ['ui.bootstrap', 'angular-edit-row', 'ui-notification', 'uiSwitch', 'ngMaterial'])
spApp.controller('helpListCtrl', function($scope, $http, $modal, Notification) {
function DemoCtrl ($timeout, $q) {
var self = this;
// list of `state` value/display objects
self.states = loadAll();
self.selectedItem = null;
self.searchText = null;
self.querySearch = querySearch;
// ******************************
// Internal methods
// ******************************
/**
* Search for states... use $timeout to simulate
* remote dataservice call.
*/
function querySearch (query) {
var results = query ? self.states.filter( createFilterFor(query) ) : [];
return results;
}
/**
* Build `states` list of key/value pairs
*/
function loadAll() {
var allStates = '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);
};
}
}
<md-autocomplete flex="" required="" md-input-name="autocompleteField" md-no-cache="ctrl.noCache" md-selected-item="ctrl.selectedItem" md-search-text="ctrl.searchText" md-items="item in ctrl.querySearch(ctrl.searchText)" md-item-text="item.display" md-floating-label="Favorite state">
很抱歉,我不能提供plunkr,但这是生产代码
对我的错误有什么建议吗?检查您的控制器是否使用别名定义,就像原始示例一样:
ng-controller="DemoCtrl as ctrl"
就你而言
ng-controller="helpListCtrl as ctrl"
querySearch
应返回承诺
比如
function querySearch(query){
var d = $q.defer();
var results = query ? self.states.filter( createFilterFor(query) ) : [];
d.resolve(results)
return d.promise;
}
试试这个例子
有棱角的
.module('firstApplication',['ngMaterial']))
.控制器(“自动完成控制器”,自动完成控制器);
函数自动完成控制器($timeout、$q、$log){
var self=这个;
self.simulatequaly=false;
self.isDisabled=false;
//要显示的状态列表
self.states=loadStates();
self.querySearch=querySearch;
self.selectedItemChange=selectedItemChange;
self.searchTextChange=searchTextChange;
self.newState=newState;
函数newState(state){
警报(“此功能尚未实现!”);
}
函数querySearch(查询){
var results=query?self.states.filter(createFilterFor(query)):self.states,deferred;
if(自模拟){
递延=$q.defer();
$timeout(函数(){
延迟。解决(结果);
},
Math.random()*1000,false);
回报。承诺;
}否则{
返回结果;
}
}
函数searchTextChange(文本){
$log.info('文本更改为'+文本);
}
功能selectedItemChange(项目){
$log.info('Item改为'+JSON.stringify(Item));
}
//将状态列表构建为键值对的映射
函数loadStates(){
var allStates='阿拉巴马州、阿拉斯加、亚利桑那州、阿肯色州、加利福尼亚州、科罗拉多州、康涅狄格州、特拉华州、\
佛罗里达州、乔治亚州、夏威夷州、爱达荷州、伊利诺伊州、印第安纳州、爱荷华州、堪萨斯州、肯塔基州、路易斯安那州、\
缅因州、马里兰州、马萨诸塞州、密歇根州、明尼苏达州、密西西比州、密苏里州、蒙大拿州、\
内布拉斯加州、内华达州、新罕布什尔州、新泽西州、新墨西哥州、纽约州、北卡罗来纳州、\
北达科他州、俄亥俄州、俄克拉荷马州、俄勒冈州、宾夕法尼亚州、罗得岛州、南卡罗来纳州、\
南达科他州、田纳西州、德克萨斯州、犹他州、佛蒙特州、弗吉尼亚州、华盛顿州、西弗吉尼亚州、\
威斯康星州,怀俄明州;
返回allStates.split(/,+/g).map(函数(状态){
返回{
值:state.toLowerCase(),
显示:状态
};
});
}
//用于搜索查询的筛选函数
函数createFilterFor(查询){
var lowercasequaly=angular.lowercase(查询);
返回函数filterFn(状态){
返回(state.value.indexOf(lowercasequaly)==0);
};
}
}
md autocomplete
可用于提供来自本地或远程数据源的搜索结果
{{item.display}
未找到与“{ctrl.searchText}}”匹配的状态。
创建一个新的!
显示结果的进度?
禁用缓存?
使残废
md autocomplete
在执行查询时缓存结果。在第一次调用之后,它使用缓存的结果来消除不必要的服务器请求或查找逻辑,并且可以将其禁用
您的任何代码中都没有成功
。您能否尝试查明错误(应位于控制台中该行的右侧),并尝试显示success
所在的代码块。如果你能在那里重现这个问题,A也会非常有帮助。我已经在原始帖子中添加了控制台输出。它指向angular.js。我在同一控制器中使用成功
,但在自动完成功能之外。代码驻留在Sharepoint中,因此我无法真正复制环境。
ng-controller="helpListCtrl as ctrl"
function querySearch(query){
var d = $q.defer();
var results = query ? self.states.filter( createFilterFor(query) ) : [];
d.resolve(results)
return d.promise;
}