md-select组件丢失ng-selected值

时间:2016-08-01 08:56:08

标签: angularjs safari angular-material

我使用Angular 1.5.4&材料1.0.6。如果我使用chrome,以下示例的所有内容都可以正常工作。但是,如果我使用safari,则不会预先选择任何值。

组件的模板看起来像

<md-select ng-model="$ctrl.selectedFruit">
      <md-option ng-repeat="fruit in $ctrl.fruits" ng-value="fruit" required
                 ng-selected="$first" >
        {{fruit.name}} {{fruit.weight}}
      </md-option>
</md-select>

组件看起来像

.component('applicantAccount', {
    // @ngInject

    bindings: {
        selectedFruit: "="
    },
    controller: function (accountService) {
        var ctrl = this;
        fruitService.initFruitBefore(function () {
            ctrl.fruits= fruitService.getFruits();
        });
    },
    templateUrl: 'views/templates/selectFruitTemplate.html'
});

fruitService:

var fruits = [];
var initFruits = function () {
  return $http.get(configuration.apiUrl + "fruits")
    .then(function success(response) {
      fruits =  response.data || []
      return response;
    })
};

var getFruits = function () {
  var filterEx = {type: "fresh"};
  return $filter('filter')(fruits , filterEx);
};

var initFruitBefore = function (callback) {
  if (!areFruitsAvailable()) {
    initFruits().then(callback);
  }
  else{
    callback();
  }
};
var areFruitsAvailable = function () {
  return typeof fruits[0] !== 'undefined'
};
var getFreshFruit = function () {
  var filterEx = {type: "fresh"};
  var filtered = $filter('filter')(fruits, filterEx);

  return filtered[0] || null;
};

控制器:

 fruitService.initFruitBefore(function () {
  ctrl.selectedFruit = accountService.getFreshFruit();
  ctrl.fruits = accountService.getFruits();
});  

奇怪的事情(只有safari)是,ctrl.fruits在初始化selectedFruit之前被初始化(在组件之外)。如果发生这种情况,则会显示短期值。 有谁有想法发生了什么?为什么表现出不同的野生动物园? 谢谢你&amp;抱歉我的英文不好

解决方案

我添加了ng-model-options = {trackBy:'$ value.id'}。

角度材料:
要确定是否选择了某些内容,ngModelController将查看$ scope.selectedUser ==($ scope.users中的任何用户);;

Javascript的==运算符不检查深度相等(即对象上的所有属性是否相同),而是检查对象是否是内存中的同一对象。在这种情况下,我们有两个相同对象的实例,但它们作为唯一实体存在于内存中。因此,select将没有填充所选用户的值。

如需进一步说明,请查看https://material.angularjs.org/latest/api/directive/mdSelect

0 个答案:

没有答案