在 md-autocomplete 中填充 md-items 的用户对象
User object to populate md-items in md-autocomplete
我想用包含用户对象的对象填充我的 md-autocomplete。它通过工厂以 JSON 格式检索到 $scope.users
。我可以使用 Angular 查看器在我的控制台中检查对象。
users:
user_id:
display_name: "value"
first_name: "value"
last_name: "value"
user_id:
display_name: "value"
first_name: "value"
last_name: "value"
etc...
我希望模型值设置为user_id
模型,显示文本为display_name
。这可能吗?我试过了(根据 documentation 只需要 md-items
属性
<md-autocomplete md-items="u in users"></autocomplete>
但它什么也没做。遵循 "basic example"
也不行
<md-autocomplete md-selected-item="videoInfo.lineUp.1" md-search-text="looseheadSearchText" md-items="u in users" md-item-text="u.display_name"></md-autocomplete>
编辑
这是我用来获取 users
对象的代码:
angular.module("app").controller("MainController", ["$scope", "userRepository", function ($scope, userRepository) {
userRepository.get(function(data) {
$scope.users = data;
});
app.factory("userRepository",
function($resource) {
return $resource("/wp-content/themes/zerif-lite-child/inc/get_users.php");
});
在提问之前,您应该始终先查看 documentation。
它说你至少需要这样的东西:
<md-autocomplete
md-selected-item="selectedUser"
md-search-text-change="searchTextChange(searchText)"
md-search-text="searchText"
md-selected-item-change="selectedItemChange(item)"
md-items="item in querySearch(searchText)"
md-item-text="item.display_name"
md-min-length="0"
placeholder="What is your favorite User?">
<md-item-template>
<span md-highlight-text="searchText" md-highlight-flags="^i">{{item.display_name}}</span>
</md-item-template>
<md-not-found>
No states matching "{{searchText}}" were found.
</md-not-found>
</md-autocomplete>
希望对您有所帮助
更新
searchQuery()
是一个函数,它会在您每次键入内容时被调用。基本上,您需要的是 returns 所有用户(如果未写任何内容)或仅其名称包含自动完成输入中所写内容的用户的功能。
您不应该完全按照示例中的方式进行操作。因为您使用的是真实的 $http
请求,而他们没有。他们只是借助超时和映射等不同功能来模拟它。您的函数应如下所示:
$scope.searchQuery = function(searchText){
return userRepository.get(searchText);
}
就是这样。
至于使用 this
而不是 $scope
,这是 John Papa 在他的 angular 风格指南中推荐的。他说 $scope
应该只在更具体的条件下使用。
HTML:
<md-autocomplete
md-selected-item="videoInfo.lineUp[1]"
md-search-text="searchText"
md-items="item in searchQuery(searchText)"
md-item-text="item.display">
</md-autocomplete>
Angular searchQuery()
函数:
$scope.searchQuery = function (searchText) {
var query = searchText.toLowerCase();
var users = [];
angular.forEach($scope.users,
function (value, key) {
// value = user object
// key = userId
var dN = value["display_name"];
if (dN) {
var obj = {};
obj[key] = value;
obj["display"] = dN;
if (dN.toLowerCase().indexOf(query) !== -1) {
users.push(obj);
}
}
});
return users;
}
我想用包含用户对象的对象填充我的 md-autocomplete。它通过工厂以 JSON 格式检索到 $scope.users
。我可以使用 Angular 查看器在我的控制台中检查对象。
users:
user_id:
display_name: "value"
first_name: "value"
last_name: "value"
user_id:
display_name: "value"
first_name: "value"
last_name: "value"
etc...
我希望模型值设置为user_id
模型,显示文本为display_name
。这可能吗?我试过了(根据 documentation 只需要 md-items
属性
<md-autocomplete md-items="u in users"></autocomplete>
但它什么也没做。遵循 "basic example"
也不行<md-autocomplete md-selected-item="videoInfo.lineUp.1" md-search-text="looseheadSearchText" md-items="u in users" md-item-text="u.display_name"></md-autocomplete>
编辑
这是我用来获取 users
对象的代码:
angular.module("app").controller("MainController", ["$scope", "userRepository", function ($scope, userRepository) {
userRepository.get(function(data) {
$scope.users = data;
});
app.factory("userRepository",
function($resource) {
return $resource("/wp-content/themes/zerif-lite-child/inc/get_users.php");
});
在提问之前,您应该始终先查看 documentation。
它说你至少需要这样的东西:
<md-autocomplete
md-selected-item="selectedUser"
md-search-text-change="searchTextChange(searchText)"
md-search-text="searchText"
md-selected-item-change="selectedItemChange(item)"
md-items="item in querySearch(searchText)"
md-item-text="item.display_name"
md-min-length="0"
placeholder="What is your favorite User?">
<md-item-template>
<span md-highlight-text="searchText" md-highlight-flags="^i">{{item.display_name}}</span>
</md-item-template>
<md-not-found>
No states matching "{{searchText}}" were found.
</md-not-found>
</md-autocomplete>
希望对您有所帮助
更新
searchQuery()
是一个函数,它会在您每次键入内容时被调用。基本上,您需要的是 returns 所有用户(如果未写任何内容)或仅其名称包含自动完成输入中所写内容的用户的功能。
您不应该完全按照示例中的方式进行操作。因为您使用的是真实的 $http
请求,而他们没有。他们只是借助超时和映射等不同功能来模拟它。您的函数应如下所示:
$scope.searchQuery = function(searchText){
return userRepository.get(searchText);
}
就是这样。
至于使用 this
而不是 $scope
,这是 John Papa 在他的 angular 风格指南中推荐的。他说 $scope
应该只在更具体的条件下使用。
HTML:
<md-autocomplete
md-selected-item="videoInfo.lineUp[1]"
md-search-text="searchText"
md-items="item in searchQuery(searchText)"
md-item-text="item.display">
</md-autocomplete>
Angular searchQuery()
函数:
$scope.searchQuery = function (searchText) {
var query = searchText.toLowerCase();
var users = [];
angular.forEach($scope.users,
function (value, key) {
// value = user object
// key = userId
var dN = value["display_name"];
if (dN) {
var obj = {};
obj[key] = value;
obj["display"] = dN;
if (dN.toLowerCase().indexOf(query) !== -1) {
users.push(obj);
}
}
});
return users;
}