使用自动完成从 angularjs material 的数据库中获取数据
using autocomplete to bring data from DB with angularjs material
我想使用自动完成从数据库中获取数据
在我的应用程序中,我有 150 多家公司,用户必须 select 其中之一,所以我想使用自动完成
所以当用户在文本字段中写 2 个字母时,我想显示以这 2 个字母开头的公司。
我使用了此处 https://material.angularjs.org/latest/demo/autocomplete 中的示例浮动标签并像那样对其进行了修改
* Search for states... use $timeout to simulate
* remote dataservice call.
*/
function querySearch (query) {
var results = createFilterFor(query);
var deferred = $q.defer();
$timeout(function () { deferred.resolve( results ); }, Math.random() * 1000, false);
return deferred.promise;
}
* filterCompany function return the company that start with cmompanycode
*/
function createFilterFor (companyCode) {
service.filterCompany(companyCode).then(function (response) {
return response.data.companies;
});
}
这是 html
<div class="col-sm-2" ng-class="{ 'has-error': form.company.$dirty && form.company.$error.required }">
<md-input-container class="md-block">
<md-autocomplete flex="" required="" md-input-name="autocompleteField" md-input-minlength="2" md-input-maxlength="18" md-no-cache="ul.noCache" md-selected-item="ul.selectedItem" md-search-text="ul.searchText" md-items="item in ul.querySearch(ul.searchText)" md-item-text="item.display" md-floating-label="Favorite state">
<md-item-template>
<span md-highlight-text="ul.searchText">{{item.display}}</span>
</md-item-template>
</md-autocomplete>
</md-input-container>
</div>
但是当我 运行 我得到代码时
angular.js:12520 TypeError: Cannot read property 'length' of undefined
at W (angular-material.min.js:12)
at j (angular-material.min.js:12)
at o (angular-material.min.js:12)
at processQueue (angular.js:14792)
at angular.js:14808
at Scope.$eval (angular.js:16052)
at Scope.$digest (angular.js:15870)
at angular.js:16091
at completeOutstandingRequest (angular.js:5552)
at angular.js:5829
这是我的服务
function filterCompany(companyCode){
var deferred = $q.defer();
// simulate api call with $timeout
return $timeout(function () {
var encodeString = 'companyCode='+companyCode
return $http({
url: './getCompaniesAutoComplete',
method: "POST",
data: encodeString,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function (response) {
response.message = 'getUser done Successfully';
}).error(function (response){
response.message = 'Error during getUser operation';
});
deferred.resolve({ success: true });
}, 1000);
return deferred.promise;
}
您可能遇到了一些 CTRL+C CTRL+V 误解,并将文档中的模拟 $timeout
代码与您自己的代码混淆了。
自动完成接受使用项目数组或简单数组解决的承诺。承诺永远不会通过任何响应或数据得到解决,因为它在 filterCompany
中得到解决:
deferred.resolve({ success: true });
摆脱超时和手动延迟。做类似的事情:
function filterCompany(companyCode) {
var encodeString = 'companyCode='+companyCode
return $http({
url: './getCompaniesAutoComplete',
method: "POST",
data: encodeString,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
}
然后在您的控制器中:
function querySearch(companyCode) {
return service.filterCompany(companyCode)
.then(function (response) {
return response.data.companies;
});
}
这就是您所需要的。
我想使用自动完成从数据库中获取数据 在我的应用程序中,我有 150 多家公司,用户必须 select 其中之一,所以我想使用自动完成 所以当用户在文本字段中写 2 个字母时,我想显示以这 2 个字母开头的公司。 我使用了此处 https://material.angularjs.org/latest/demo/autocomplete 中的示例浮动标签并像那样对其进行了修改
* Search for states... use $timeout to simulate
* remote dataservice call.
*/
function querySearch (query) {
var results = createFilterFor(query);
var deferred = $q.defer();
$timeout(function () { deferred.resolve( results ); }, Math.random() * 1000, false);
return deferred.promise;
}
* filterCompany function return the company that start with cmompanycode
*/
function createFilterFor (companyCode) {
service.filterCompany(companyCode).then(function (response) {
return response.data.companies;
});
}
这是 html
<div class="col-sm-2" ng-class="{ 'has-error': form.company.$dirty && form.company.$error.required }">
<md-input-container class="md-block">
<md-autocomplete flex="" required="" md-input-name="autocompleteField" md-input-minlength="2" md-input-maxlength="18" md-no-cache="ul.noCache" md-selected-item="ul.selectedItem" md-search-text="ul.searchText" md-items="item in ul.querySearch(ul.searchText)" md-item-text="item.display" md-floating-label="Favorite state">
<md-item-template>
<span md-highlight-text="ul.searchText">{{item.display}}</span>
</md-item-template>
</md-autocomplete>
</md-input-container>
</div>
但是当我 运行 我得到代码时
angular.js:12520 TypeError: Cannot read property 'length' of undefined
at W (angular-material.min.js:12)
at j (angular-material.min.js:12)
at o (angular-material.min.js:12)
at processQueue (angular.js:14792)
at angular.js:14808
at Scope.$eval (angular.js:16052)
at Scope.$digest (angular.js:15870)
at angular.js:16091
at completeOutstandingRequest (angular.js:5552)
at angular.js:5829
这是我的服务
function filterCompany(companyCode){
var deferred = $q.defer();
// simulate api call with $timeout
return $timeout(function () {
var encodeString = 'companyCode='+companyCode
return $http({
url: './getCompaniesAutoComplete',
method: "POST",
data: encodeString,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function (response) {
response.message = 'getUser done Successfully';
}).error(function (response){
response.message = 'Error during getUser operation';
});
deferred.resolve({ success: true });
}, 1000);
return deferred.promise;
}
您可能遇到了一些 CTRL+C CTRL+V 误解,并将文档中的模拟 $timeout
代码与您自己的代码混淆了。
自动完成接受使用项目数组或简单数组解决的承诺。承诺永远不会通过任何响应或数据得到解决,因为它在 filterCompany
中得到解决:
deferred.resolve({ success: true });
摆脱超时和手动延迟。做类似的事情:
function filterCompany(companyCode) {
var encodeString = 'companyCode='+companyCode
return $http({
url: './getCompaniesAutoComplete',
method: "POST",
data: encodeString,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
}
然后在您的控制器中:
function querySearch(companyCode) {
return service.filterCompany(companyCode)
.then(function (response) {
return response.data.companies;
});
}
这就是您所需要的。