md-autocomplete 未显示文本输入
text input not shown with md-autocomplete
我正在尝试在我的网站中使用 angular material 的自动完成组件。
在 html 代码中我有:
<md-autocomplete md-selected-item="selectedItem" md-search-text="searchText" md-items="item in getMatches(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>
在我的控制器中我有以下内容:
app.controller('IndexController', function ($scope) {
$scope.getMatches = function (text) {
alert(text);
}
});
如您所见,我没有实施太多。但是如果自动完成试图找到一些东西,它应该执行 getMatches 并提醒文本。
welp 在我的场景中它除了打印 "No matches found."
什么都不做
没有输入文本来搜索的文本输入。
我错过了什么?
jsfiddle 在 https://jsfiddle.net/p7wc8psy/
我不能让你的 fiddle 工作。我已经努力达到 https://jsfiddle.net/p7wc8psy/7/,但我认为您需要最新的 angular 到 运行 material,这很难在 jsFiddle 中加载。您可能想切换到 codepen 或其他东西。
同时,我认为你缺少的是:
<md-autocomplete
name="search-drink-autocomplete-input"
md-selected-item="selectedItem"
md-search-text="searchText"
md-items="item in getMatches(searchText)"
md-item-text="item.display"
md-search-text-change="getMatches(searchtext)"> // *********
你做的DOM是正确的
<md-autocomplete md-selected-item="selectedItem" md-search-text="searchText" md-items="item in getMatches(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>
但是下面显示的函数是错误的,因为它没有 returning 任何你得到 "No matches found."
的原因
app.controller('IndexController', function ($scope) {
$scope.getMatches = function (text) {
alert(text);//this does not return anything
}
});
现在下一个问题应该是什么return。
它应该 return 一个 JSON 数组,如下所示。
[{
value: "apple",
display: "apple"
}, {
value: "banana",
display: "banana"
}, {
value: "gauva",
display: "gauva"
}, {
value: "melon",
display: "melon"
}, {
value: "potato",
display: "potato"
}, {
value: "carrot",
display: "carrot"
}, {
value: "cauliflower",
display: "cauliflower"
}, {
value: "jasmine",
display: "jasmine"
}, {
value: "cabbage",
display: "cabbage"
}, {
value: "peas",
display: "peas"
}]
JSON
中的display key
是什么
既然你在这里提到 md-item-text="item.display"
所以 returned 数组必须有显示在自动完成下拉列表中的键。
所以我的搜索功能是这样的:
$scope.myDta = [{
value: "apple",
display: "apple"
}, {
value: "banana",
display: "banana"
}, {
value: "gauva",
display: "gauva"
}, {
value: "melon",
display: "melon"
}, {
value: "potato",
display: "potato"
}, {
value: "carrot",
display: "carrot"
}, {
value: "cauliflower",
display: "cauliflower"
}, {
value: "jasmine",
display: "jasmine"
}, {
value: "cabbage",
display: "cabbage"
}, {
value: "peas",
display: "peas"
}];
$scope.getMatches = function (text) {
text = text.toLowerCase();
var ret = $scope.myDta.filter(function (d) {
//return element which starts with entered text
return d.display.startsWith(text);
});
return ret;
}
工作代码here
测试用例:输入ca
希望对您有所帮助!
我正在尝试在我的网站中使用 angular material 的自动完成组件。
在 html 代码中我有:
<md-autocomplete md-selected-item="selectedItem" md-search-text="searchText" md-items="item in getMatches(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>
在我的控制器中我有以下内容:
app.controller('IndexController', function ($scope) {
$scope.getMatches = function (text) {
alert(text);
}
});
如您所见,我没有实施太多。但是如果自动完成试图找到一些东西,它应该执行 getMatches 并提醒文本。
welp 在我的场景中它除了打印 "No matches found."
什么都不做没有输入文本来搜索的文本输入。
我错过了什么?
jsfiddle 在 https://jsfiddle.net/p7wc8psy/
我不能让你的 fiddle 工作。我已经努力达到 https://jsfiddle.net/p7wc8psy/7/,但我认为您需要最新的 angular 到 运行 material,这很难在 jsFiddle 中加载。您可能想切换到 codepen 或其他东西。
同时,我认为你缺少的是:
<md-autocomplete
name="search-drink-autocomplete-input"
md-selected-item="selectedItem"
md-search-text="searchText"
md-items="item in getMatches(searchText)"
md-item-text="item.display"
md-search-text-change="getMatches(searchtext)"> // *********
你做的DOM是正确的
<md-autocomplete md-selected-item="selectedItem" md-search-text="searchText" md-items="item in getMatches(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>
但是下面显示的函数是错误的,因为它没有 returning 任何你得到 "No matches found."
的原因app.controller('IndexController', function ($scope) {
$scope.getMatches = function (text) {
alert(text);//this does not return anything
}
});
现在下一个问题应该是什么return。
它应该 return 一个 JSON 数组,如下所示。
[{
value: "apple",
display: "apple"
}, {
value: "banana",
display: "banana"
}, {
value: "gauva",
display: "gauva"
}, {
value: "melon",
display: "melon"
}, {
value: "potato",
display: "potato"
}, {
value: "carrot",
display: "carrot"
}, {
value: "cauliflower",
display: "cauliflower"
}, {
value: "jasmine",
display: "jasmine"
}, {
value: "cabbage",
display: "cabbage"
}, {
value: "peas",
display: "peas"
}]
JSON
中的display key
是什么
既然你在这里提到 md-item-text="item.display"
所以 returned 数组必须有显示在自动完成下拉列表中的键。
所以我的搜索功能是这样的:
$scope.myDta = [{
value: "apple",
display: "apple"
}, {
value: "banana",
display: "banana"
}, {
value: "gauva",
display: "gauva"
}, {
value: "melon",
display: "melon"
}, {
value: "potato",
display: "potato"
}, {
value: "carrot",
display: "carrot"
}, {
value: "cauliflower",
display: "cauliflower"
}, {
value: "jasmine",
display: "jasmine"
}, {
value: "cabbage",
display: "cabbage"
}, {
value: "peas",
display: "peas"
}];
$scope.getMatches = function (text) {
text = text.toLowerCase();
var ret = $scope.myDta.filter(function (d) {
//return element which starts with entered text
return d.display.startsWith(text);
});
return ret;
}
工作代码here
测试用例:输入ca
希望对您有所帮助!