我想在内部范围被破坏后重新编译。
我正在使用重新编译功能来帮助,这是" transcluded"是的。 每当我想破坏内部范围时,它也会破坏父(外部)范围。
如何在保持此重新编译功能不变的情况下避免删除父作用域?
function compile() {
transclude(scope, function(clone, clonedScope) {
previousElements = clone;
$el.append(clone);
$timeout(function () {
scope.callBack();
alert("Df");
}, 0);
});
}
$scope.callBack = function(){
var elem = document.getElementById('test');
//This code kill the test div, but also the parent scope
//Can i only kill the test div scope?
angular.element(elem).scope().$destroy();
alert("dd");
}
以下是plunker: http://plnkr.co/edit/MePu8BipkkdHV0IEatbo
答案 0 :(得分:0)
它正在销毁父作用域,因为您实际上从未创建过子作用域。
您可以尝试将scope: true
添加到kcdRecompile
指令。
app.directive('kcdRecompile', ['$parse','$timeout', function($parse, $timeout) {
'use strict';
return {
transclude: true,
scope: true,
link: function link(scope, $el, attrs, ctrls, transclude) {
...
这会给kcdRecompile
自己的范围。
如果您希望kcdRecompile
拥有父作用域,但其被转换的内容具有自己的作用域,则可以使用scope.$new()
而不是scope
调用转换函数。
app.directive('kcdRecompile', ['$parse','$timeout', function($parse, $timeout) {
'use strict';
return {
transclude: true,
link: function link(scope, $el, attrs, ctrls, transclude) {
var previousElements;
//compile();
function compile() {
transclude(scope.$new(), function(clone, clonedScope) {
...