Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角材质自动完成不工作_Javascript_Angularjs_Angularjs Directive_Autocomplete - Fatal编程技术网

Javascript 角材质自动完成不工作

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'

我试图使用angular material的autocomplete指令。我已尝试从中实现该示例

但我一开始键入,就得到
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;
}