Angular – 通过不同的帧附加html,每帧一个模块

前端之家收集整理的这篇文章主要介绍了Angular – 通过不同的帧附加html,每帧一个模块前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的代码有主要的windonw和一个iframe,每个都有你的模块.主窗口中的一个按钮触发应该将html附加到iframe中的click事件,附加到其中的新html应该正确应用拦截器和指令,但它不起作用!
Angular javascript:
  1. angular.module('module1',[]).controller('Controller1',function ($scope) {
  2. $scope.get = function(){
  3. $http.jsonp("some_url_here").success(function(html){
  4. $scope.content = html;
  5. });
  6. }
  7. }).directive('click',function($compile) {
  8. return {
  9. link: function link(scope,element,attrs) {
  10. element.bind('click',function(){
  11. var unbind = scope.$watch(scope.content,function() {
  12. var div=document.getElementById("frame").contentWindow.angular.element("divId");
  13. div.append($compile(scope.content)(div.scope()));
  14.  
  15. unbind();
  16. });
  17. });
  18. }
  19. }
  20. });
  21.  
  22.  
  23. angular.module('module2',[]).directive('a',function() {
  24. return {
  25. restrict:'E',link: function(scope,attrs) {
  26. console.log('ping!');
  27. console.log(attrs.href);
  28. }
  29. };
  30. });

HTML代码

  1. <html ng-app="modile1">
  2. <div ng-controller="Controller1">
  3. <button type="button",ng-click="get('any_value')",click:""/> Load frame
  4. </div>
  5.  
  6. <iframe id="frame" src="/please/ignore/this">
  7. <!-- considere the html as appended from iframe-src and contains ng-app="module2" -->
  8. <html ng-app="module2">
  9. <div id="divId">
  10. <!-- code should be inject here -->
  11. </div>
  12. </html>
  13. </iframe>
  14. </html>

请考虑angularjs,jquery(如果适用),模块声明以及标题是否正确加载.

我想将主框架/窗口中的html内容加载到iframe中并正确运行拦截器和指令.可能吗?如果是,我该怎么办?

谢谢你的进步!

我试过这个代码,看起来工作正常!我在这里找到了: http://www.snip2code.com/Snippet/50430/Angular-Bootstrap
  1. var $rootElement = angular.element(document.getElementById("frame").contentWindow.document);
  2. var modules = [
  3. 'ng','module2',function($provide) {
  4. $provide.value('$rootElement',$rootElement)
  5. }
  6. ];
  7.  
  8. var $injector = angular.injector(modules);
  9.  
  10. var $compile = $injector.get('$compile');
  11.  
  12. $rootElement.find("div#divId").append(scope.content);
  13.  
  14. var compositeLinkFn = $compile($rootElement);
  15.  
  16. var $rootScope = $injector.get('$rootScope');
  17. compositeLinkFn($rootScope);
  18.  
  19. $rootScope.$apply();

猜你在找的Angularjs相关文章