【问题标题】:Angular Material: md-select not showing selected option角度材料:md-select 不显示选定的选项
【发布时间】:2020-06-17 21:42:54
【问题描述】:

我正在使用 AngularJS 和 Angular Material 开发一个应用程序。

在我的模板中:

<md-input-container>
  <label>{{::"Users" | translate }}</label>
  <md-select md-container-class="default-select"
             ng-model="$ctrl.filter.user"
             ng-change="$ctrl.filterPostsByUser()">
    <md-option ng-value="user"
               ng-repeat="user in $ctrl.UsersService.config.users"
               ng-selected="{{user.UserName == $ctrl.filter.currentUser.userName ? 'selected' : ''}}">
      {{ user.userName }}
    </md-option>
  </md-select>
</md-input-container>

在脚本(JavaScript)文件中:

filterPostsByUser() {
 if (this.filter.user) {
  this.userID = this.filter.user.id;
 }
}

如果我检查 md-select 元素,我可以看到当前用户的名称(比如说“John Doe”)选项有 ng-selected="selected",但在视觉上,md-select 不显示“John Doe”,但是通用的默认占位符“用户”。

缺少什么?

【问题讨论】:

    标签: angularjs ecmascript-6 angularjs-material


    【解决方案1】:

    也许,下面的代码会帮助你

    class AppController {
      constructor($q) {
        this.deferred = $q.defer();
        this.userService = {
          users: [{
              userName: 'John Dow'
            },
            {
              userName: 'Marry Poppins'
            },
            {
              userName: 'Harry Potter'
            }
          ],
        };
        this.filter = {
          user: this.userService.users[0]
        }
      }
    }
    
    AppController.$inject = ['$q'];
    
    angular.module('app', ['ngMaterial', 'ngMessages'])
      .controller('appController', AppController);
    
    angular.bootstrap(document.querySelector('#root'), ['app']);
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.12/angular-material.min.css">
    <!-- Angular Material requires Angular.js Libraries -->
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.6/angular.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.6/angular-animate.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.6/angular-aria.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.6/angular-messages.min.js"></script>
    
    <!-- Angular Material Library -->
    <script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.12/angular-material.min.js"></script>
    
    <div id="root" ng-controller="appController as appController">
    
      <md-input-container>
        <label>Users</label>
        <md-select md-container-class="default-select" ng-model="appController.filter.user" ng-change="$ctrl.filterPostsByUser()">
          <md-option ng-value="user" ng-repeat="user in appController.userService.users">{{ user.userName }}</md-option>
        </md-select>
      </md-input-container>
    
    
    </div>

    【讨论】:

    • 如果users 是(因为它必须)一个对象怎么办?
    • ng-selected 条件在哪里?我可以看到代码有效,但我不明白如何?
    • 显示值基于 ng-model 的值定义。我们之前确实设置了它
    猜你喜欢
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 2017-11-24
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多