Angular.js autocomplete with $http.get TypeError: Cannot read property 'success' of undefined
Angular.js autocomplete with $http.get TypeError: Cannot read property 'success' of undefined
使用此代码,我总是得到 TypeError:无法读取未定义的 属性 'success'。
我也尝试过使用 .then 而不是 .success 但我得到了同样的错误。
经过十多个小时的谷歌搜索,我有点绝望...
Html:
<div ng-controller="search_interest" layout="column">
<md-chips ng-model="ctrl.selectedVegetables" md-autocomplete-snap md-require-match>
<md-autocomplete
md-selected-item="selectedItem"
md-search-text="searchText"
md-items="item in getInterest(searchText)"
md-item-text="item.name"
placeholder="Search for a vegetable">
<span md-highlight-text="searchText">{{item.name}} :: {{item.type}}</span>
</md-autocomplete>
<md-chip-template>
<span>
<strong>{{$chip.name}}</strong>
<em>({{$chip.type}})</em>
</span>
</md-chip-template>
</md-chips>
</div>
和 js:
var app = angular.module('autocomplete_app', ['ngMaterial']);
app.controller('search_interest',
function($scope, $http){
$scope.searchText = '';
$scope.selectedItem = undefined;
function getInterest($scope){
$http.get("someurl.php?query=" + $scope.searchText)
.success(function(data){
$scope.interest = data;
console.log('data', JSON.stringify(data));
});
};
});
问题不是您的 http
调用,而是 angular 材料导入完成的调用,如下图所示,问题出在 angularjs-materials .js 第 10 行。
控制台图像
你可以看看这个版本:我在上面的评论中添加了plunker。
我对 HTML 页面的 header 做了一些改动。
这不起作用,因为我无法调用您请求的 URL,但您的解决方案应该有效。
新答案
在查询搜索功能中我有
function querySearch(searchText) {
if (!searchText || searchText.length < 3) {
return;
}
我应该返回一个空数组。 return [];
感谢 berkyl 在 github.
上回答了我的问题
较早的回答
在凉亭 "angular-material": "^1.0.7"
和 "angular-material": "^1.0.5"
我收到类似的错误:
angular.js:13550 TypeError: Cannot read property 'then' of undefined
但是当我使用 cdn version 1.0.5 时它工作正常。
只需使用基本的自动完成功能
https://material.angularjs.org/latest/api/directive/mdAutocomplete
指令然后自行定制。
HTML
<md-autocomplete md-selected-item="selectedItem" md-search-text="searchText" md-items="item in querySearch(searchText)" md-item-text="item.display">
<md-item-template>
<span md-highlight-text="searchText">{{item.display}}</span>
</md-item-template>
<md-not-found>No matches found.</md-not-found>
</md-autocomplete>
工作正常。
使用此代码,我总是得到 TypeError:无法读取未定义的 属性 'success'。 我也尝试过使用 .then 而不是 .success 但我得到了同样的错误。 经过十多个小时的谷歌搜索,我有点绝望...
Html:
<div ng-controller="search_interest" layout="column">
<md-chips ng-model="ctrl.selectedVegetables" md-autocomplete-snap md-require-match>
<md-autocomplete
md-selected-item="selectedItem"
md-search-text="searchText"
md-items="item in getInterest(searchText)"
md-item-text="item.name"
placeholder="Search for a vegetable">
<span md-highlight-text="searchText">{{item.name}} :: {{item.type}}</span>
</md-autocomplete>
<md-chip-template>
<span>
<strong>{{$chip.name}}</strong>
<em>({{$chip.type}})</em>
</span>
</md-chip-template>
</md-chips>
</div>
和 js:
var app = angular.module('autocomplete_app', ['ngMaterial']);
app.controller('search_interest',
function($scope, $http){
$scope.searchText = '';
$scope.selectedItem = undefined;
function getInterest($scope){
$http.get("someurl.php?query=" + $scope.searchText)
.success(function(data){
$scope.interest = data;
console.log('data', JSON.stringify(data));
});
};
});
问题不是您的 http
调用,而是 angular 材料导入完成的调用,如下图所示,问题出在 angularjs-materials .js 第 10 行。
控制台图像
你可以看看这个版本:我在上面的评论中添加了plunker。
我对 HTML 页面的 header 做了一些改动。 这不起作用,因为我无法调用您请求的 URL,但您的解决方案应该有效。
新答案
在查询搜索功能中我有
function querySearch(searchText) {
if (!searchText || searchText.length < 3) {
return;
}
我应该返回一个空数组。 return [];
感谢 berkyl 在 github.
上回答了我的问题较早的回答
在凉亭 "angular-material": "^1.0.7"
和 "angular-material": "^1.0.5"
我收到类似的错误:
angular.js:13550 TypeError: Cannot read property 'then' of undefined
但是当我使用 cdn version 1.0.5 时它工作正常。
只需使用基本的自动完成功能
https://material.angularjs.org/latest/api/directive/mdAutocomplete
指令然后自行定制。
HTML
<md-autocomplete md-selected-item="selectedItem" md-search-text="searchText" md-items="item in querySearch(searchText)" md-item-text="item.display">
<md-item-template>
<span md-highlight-text="searchText">{{item.display}}</span>
</md-item-template>
<md-not-found>No matches found.</md-not-found>
</md-autocomplete>
工作正常。