假设我有这个:
<div class="dostuff" some-obj="parentScopeObj">
sAngular.app.directive('dostuff', ['$compile', function($compile){
return {
restrict : 'C',
scope: { someObj : '=' },
link : function(scope, element, attrs){
element.click(function(){
scope.parentScopeObj = scope.someObj;
scope.parentScopeObj.first = 'some modification';
scope.$apply();
});
}
基本上,目标是拥有一个新的、隔离的 scope.parentScopeObj,如果您在指令的 scope.parentScopeObj 中修改内容并执行 $apply(),则修改不会传播到父范围的 parentScopeObj 变量。
我试过了。
- 只是一个简单的 scope.parentScopeObj = scope.someObj; 然而,如上所述,修改指令的 scope.parentScopeObj 仍将相应地传播到父范围的 parentScopeObj
- scope.parentScopeObj = angular.copy(scope.someObj); 然而,这导致我的浏览器在我使用的实际场景中崩溃,所以这是不行的
- scope.parentScopeObj = $.extend(true, {}, scope.someObj); 但是,修改指令的 scope.parentScopeObj 仍会相应地传播到父范围的 parentScopeObj
那么我如何才能对 scope.someObj 变量(与父级双向)进行深层复制,而无需与父级进行双向深层复制?angular.copy 是不行的,因为它始终使浏览器崩溃