角。在AJAX请求之后启动新的angular指令

时间:2017-12-26 17:59:55

标签: javascript angularjs ajax

请帮帮我。 我有一些JS代码,允许使用LEAFLET地图。 https://gist.github.com/russtanevich/140235d5456c3215df6ac8b788485ad0

enter image description here

APP允许在地图上添加新广告,当我们点击标记时 - 我们会看到有关广告的信息。 我们可以选择某个类别或在广告文本中包含一些作品作为过滤器。所有过滤器都通过ajax请求工作(第51-81行)。各种类型的过滤器的各种ajax请求。 在AJAX请求之后,我们更改$ scope.mapMarkers(第13,54,61行等)。好。 mapMarkers是包含标记对象数组的变量(如第86行)。好。 marker对象有一条弹出消息(正如我们在图片中看到的那样)。此消息是角度指令(第96行,第5行)。

我们在第一次加载应用程序后得到的标记有一个很好的弹出消息(angular directive directive)。 我们在过滤AJAX请求后得到的标记 - 也有弹出消息作为angular指令。但从逻辑上讲 - 它们并没有显示出来。我们有空的弹出消息,因为角度指令在这种情况下不会启动。

enter image description here

我希望,我们了解我。也许我解释了不好的方式。 我的错是什么?建筑?或者也许有解决方案?

非常感谢!祝你今天愉快!最好的问候!

1 个答案:

答案 0 :(得分:0)

好的,所以我没看一下模块&leaflet-directive'但这就是我在类似的应用程序上处理它的方式。我创建了一个指令

app.directive('theDirective', function($compile, $timeout){
  return {
    restrict:'E',
    templateUrl: 'template.html' 
  };
});

在我的情况下我正在使用templateUrl,我在其他地方使用<script>类似的标签启动该部分将类似于您在geodataToMarkers中尝试的操作,只是因为您编写模板的方式不起作用,因为角度不能告诉它一个模板。

现在,当您添加标记时,您需要使用模型中的内容填充模板,这意味着您必须将它们绑定在一起。你可以做到这一点 通过将$compile注入方法并将两者结合在一起

 $compile(domElem)($scope);

这将用模型填充你的指令。 note 你应该传递d​​omHtml指令而不是html意思<the-directive></the-directive>

很难用你的代码来解释,因为你要混合jquery和angular很多,你必须改变很多东西。但要明确一个可能的快速解决方案

在标记上你必须放一个带有id =&#39;你的标记&#39;当你想把东西放在一起时,只需要找到那个带有id的元素

 var domElem = document.getElementById(markerPointerId);
          domElem.innerHTML = '<the-directive></the-directive>';

插入您的指令。并编译它

$compile(domElem)($scope);

你应该看到你填充了你放入的范围。 这意味着不是Angular方式。我只是给你一个我知道有效的解决方案

希望它有所帮助。