Javascript createElement未被Angular指令扫描
我在脚本标记中创建了一个新的DOM元素Javascript createElement未被Angular指令扫描,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我在脚本标记中创建了一个新的DOM元素 $( "#droppable_home" ).droppable({ .... drop: //Create the new widget element. This renders in my page in Chrome's inspect view. var obj = document.createElement('widget'); obj.id = "draggable_button"; obj.style.cssText
$( "#droppable_home" ).droppable({
....
drop:
//Create the new widget element. This renders in my page in Chrome's inspect view.
var obj = document.createElement('widget');
obj.id = "draggable_button";
obj.style.cssText = 'position: absolute;left: 35%;top: 50%;';
$("#droppable_home").parent().append(obj);
..........
});
我扫描“小部件”元素的角度指令如下
.directive('widget', function($compile) {
var show = function(scope, element, attrs) {
var render = function() {
alert('Found '+element.attr('id'));
if(element.attr('id') === 'draggable_button'){
alert('placing widget');
element.html('<div id="widget_button" class="button button-positive" unbindable><span ng-bind="widgetname"></span></div>');
$compile(element.contents())(scope);
}
};
scope.$watch('drag', function(newValue, oldValue) {
alert('drag changed');
if(newValue > 0) render();
});
};
return {
restrict : 'E',
link : show
};
})
指令('widget',函数($compile){
var show=函数(范围、元素、属性){
var render=function(){
警报('Found'+element.attr('id'));
if(element.attr('id')=='draggable_按钮'){
警报(“放置小部件”);
html(“”);
$compile(element.contents())(范围);
}
};
作用域:$watch('drag',函数(newValue,oldValue){
警报(“拖动已更改”);
如果(newValue>0)render();
});
};
返回{
限制:'E',
链接:show
};
})
问题——上面使用jQuery创建的元素永远不会被Angular指令识别
如果知道缺少什么,那就太好了。请尝试下面的方法,而不是使用document.createElement: -element.id是放置“ng应用程序”的元素的id var el=angular.element(document.getElementById(“element.id”); var scope=el.scope(); var注入器=el.注入器(); var$compile=injector.get(“$compile”); var mynewel=$compile(“”)(范围)
很抱歉,我最初在问题中注释掉了$compile,但现在已对问题进行了编辑。即使使用$compile也不起作用。我是否遗漏了$compile语句中的某些内容?我的意思是使用$compile,而不是document.createElement。
obj
已经编译并链接到一个作用域,在此之前,指令可以触发,这意味着您的编译代码应该是动态注入html的一部分,不是您的指令定义。Javascript createElement是从jQuery“drop”回调内部调用的。在这种情况下,如何将其链接到Angular scope?@NoypiGilas将javascript作为$compile-d HTML移动到我的控制器中,这就完成了任务!如何将答案标记为已关闭?非常感谢!我暂时保留控制器,并将重新讨论此问题。
var el = angular.element( document.getElementById("element.id") );
var scope = el.scope();
var injector = el.injector();
var $compile = injector.get("$compile");
var mynewel = $compile("<div widget></div>")(scope)