您可能可以使用ngSwitch
和的组合ngInclude
。
对于您需要处理的部分ng-show
,请使用ng-switch
:
<section ng-switch on='editMode'>
<!-- editing case, leave src
<div ng-switch-when='true'>
<div ng-include src='edittemplates.sectionFoo'></div>
</div>
<!-- show case -->
<div ng-switch-when='false'>
<!-- show some stuff -->
</div>
</section>
通常,ng-switch
仍然会编译所有 DOM,但这里的技巧是最初让edittemplates
对象以空键开始:
App.controller('Foo', function($scope) {
$scope.edittemplates = {
sectionFoo: ''
};
});
然后,当您切换到编辑模式时,填写这些模板值:
$scope.edit = function() {
$scope.editMode = true;
if ($scope.edittemplatesLoaded) return; // Don't set these twice
$scope.edittemplates.sectionFoo = 'sectionFoo.html';
$scope.edittemplates.sectionBar = 'sectionBar.html';
// etc.
$scope.edittemplatesLoaded = true;
};
因为src
属性最初是空的,所以最初不会有任何东西要编译。
我还没有尝试过,因为我还不需要类似的东西,但它应该可以工作。