所以在我的应用程序中,我有这个控制器用ajax检查服务器并查看用户是否使用JWT进行了身份验证,如果是,则用不同的元素替换该元素,然后执行范围注入。该部分有效,但主要问题是即使旧元素不再存在,$ scope。$ watch也会运行两次,因为Angular仍然具有以前附加到它运行的代码。
这里是一个注射器无法工作的小提琴,即使它绝对适用于我。单击右侧div可以让您知道它已被单击。单击左侧会增加服务中的值,该值会向右侧控制器中的一个监视单击左侧的监视。但它发生了两次,因为当它不是DOM的一部分时,Angular仍然可以看到右边替换的旧div。
https://jsfiddle.net/cq9wp6q8/
这就是注射器的调用方式:
var el = document.getElementById('insertHere')
var div = "<div id = 'rightBarReplace' ng-controller = 'rightBar' ><div id='rightBaby' ng-click = 'clickFunc()'/></div>"
el.innerHTML = (div)
这是注射器:
function startInjection(div){
console.log("StartInjection of " + div)
setTimeout(function () {
console.log("InjectRightController " + div)
var $div = angular.element(document.querySelector('#' + div))
var $appElement = angular.element(document.querySelector('#mainModule'))
console.log($div)
// console.log(angular.element(document).injector())
angular.element(document).injector().invoke(function($compile) {
var scope = angular.element($div).scope();
$compile($div)(scope);
});
}, 3333);
}
我在寻找解除绑定或$ scope。$ destroy?如果是这样,我在这种情况下如何使用它?
非常感谢你们。这个网站太棒了。 :)
编辑:我似乎通过添加时间延迟取得了一些进展。
setTimeout(function () {
console.log("Destroying")
$scope.$destroy();
}, 50);
但是会产生什么样的恐怖?请继续关注。