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;
}
}
});
在下拉菜单中选择一个项目,然后单击按钮。
alert
应该不会发生,但是由于某种原因,$scope.item
变量似乎是一个克隆,而不是完全相同的引用? (ng-options
+ track by
是否可以克隆对象并创建新实例?)
如果选择第一项并使用调试器并编写$scope.items[0] === $scope.item
,会导致错误?