ng-options创建模型的新实例,而不是从数据源中获取一个

时间:2019-02-08 15:18:47

标签: javascript angularjs

ng-options是否克隆对象,如果是的话,是否有某种方法可以停止它?

在以下代码中:

html:

<div ng-controller="Main">
  <select ng-options="item as item.text for item in items track by item.id" ng-model="item">
      <option value="">select something else</option>
    </select>
  <button ng-click="test()">
      test
    </button>
</div>

javascript:

angular
  .module('myApp', [])
  .controller('Main', function($scope) {
    const Test = function(id, text) {
      this.id = id;
      this.text = text;
    }
    $scope.items = [new Test('1', 'test1'), new Test('2', 'test2')];
    $scope.item = null;
    $scope.test = function() {
      if (!$scope.items.includes($scope.item) && $scope.item !== null) {
        alert("Items should contain item?")
        debugger;
      }
    }
  });

http://jsfiddle.net/p0a918n4/

在下拉菜单中选择一个项目,然后单击按钮。 alert应该不会发生,但是由于某种原因,$scope.item变量似乎是一个克隆,而不是完全相同的引用? (ng-options + track by是否可以克隆对象并创建新实例?)

如果选择第一项并使用调试器并编写$scope.items[0] === $scope.item,会导致错误?

0 个答案:

没有答案