html datalist不支持ng-options:如何传递对象

时间:2014-04-16 14:39:55

标签: angularjs html-datalist

我正在使用mobile-angular-ui(angular + bootstrap)开发应用程序。 在我的登录页面中,用户可以记住他们的凭据(用户名和密码)。用户'数据ara保存在localStorage中。

工作正常。我可以使用datalist在我的登录页面中加载用户:

<form name="userForm">
    <div class="form-group" ng-class="{ 'has-error' : submitted && userForm.username.$invalid && !userForm.username.$pristine }">
        <label for="inputEmail" class="control-label">Username</label>
            <input type="text" class="form-control" id="inputEmail"
                           name="username" ng-model="user.username" list="UserMemoList"
                            required>
    </div>

    <datalist id="UserMemoList">
        <option ng-repeat="item in userMemoList track by $index" ng-click="setChange(item)"
                             value="{{item.username}}" >
        </option>
    </datalist>

我可以选择我想要的item.username,但我无法选择相应的item.password。 我的问题是datalist不像select一样工作,我不能使用ng-options。我必须使用option + value将我的值传递给输入。

<div class="form-group" ng-class="{ 'has-error' : submitted && userForm.password.$invalid && !userForm.password.$pristine }">
    <label for="inputPassword" class="control-label">Password</label>
    <input name="password" type="password" class="form-control" id="inputPassword"
                           ng-model="user.password" required>
</div>

我可以使用ng-change =&#34; theSelectedUserIs(item)&#34;但我无法传递item对象,因为datalist与用户名输入有关,所以我需要传递item.username。

有什么想法吗? 我不想使用typeahead,因为实际上在bootstrap3中已弃用或添加了其他库/ js / css。 我想只使用angular和html。

我的控制器:

$scope.userMemoList = JSON.parse(localStorage.getItem('userList'));
var user = {};
LoginService.setUser(user);

userMemoList是一个对象数组,如:     {&#34;用户名&#34;:&#34;管理员&#34;,&#34;密码&#34;:&#34;管理员&#34;},...

感谢。

2 个答案:

答案 0 :(得分:3)

您也可以传递html data-id,如此


角度js文件中的

// when input name textbox change, check the value is same with datalist value or not. If value same, then bind that item.password to angular password model.
$scope.$watch "user.username", (newValue) -> 
    if newValue != null && newValue.lenght > 0 
        $("#locationlist option").each (index) ->
            if $(this).val() == newValue
                $scope.user.password = $(this).data("id") // this line will set your password text field

在您的视图中

// pass user password via html5 (data-id) element like below
<datalist id="UserMemoList">
    <option ng-repeat="item in userMemoList track by $index" ng-click="setChange(item)"
                             value="{{item.username}}" "data-id" = {{item.password}} >
    </option>
</datalist>

答案 1 :(得分:2)

这就是我在我的应用中解决这个问题的方法。用来包裹。

<input class="input form-control" placeholder="Search Conf by Application ID"
                                   list="app_ids" ng-model="confs_app_id"/></th>
                            <datalist id="app_ids">
                                <select>
                                    <option ng-repeat="app in app_list" value="{{app}}"></option>
                                </select>
                            </datalist>