Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript createElement未被Angular指令扫描_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript createElement未被Angular指令扫描

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

我在脚本标记中创建了一个新的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 = '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)