Why ng-scope is added to javascript inline of my partial view and makes alert not working?

后端 未结 2 1565
梦毁少年i
梦毁少年i 2020-12-01 15:20

I\'m using AngularJs with templating system. I want to add specific inline javascript script to each template adding alert box regards to the selected tab ( Home | List | S

相关标签:
2条回答
  • 2020-12-01 15:59

    There is a solution by coding a directive :

    https://gist.github.com/endorama/7369006

    var app = ng.module('ngLoadScript', []);
    
      app.directive('script', function() {
        return {
          restrict: 'E',
          scope: false,
          link: function(scope, elem, attr) {
            if (attr.type=='text/javascript-lazy') {
              var code = elem.text();
              var f = new Function(code);
              f();
            }
          }
        };
      });
    

    usage in partial :

      <script type="text/javascript-lazy" >
    alert("lazy loaded");
      </script>
    
    0 讨论(0)
  • 2020-12-01 16:13

    I have improved endorama's solution at github

    The same process.

    1. Create the angular-loadscript.js (from the link above)
    2. in your app use 'ngLoadScript' as a resource dependency.

      var app = angular.module('YOUR_APP_NAME', ['ngResource','ngRoute', ...,'ngLoadScript']);

    3. In your partial use 'text/javascript-lazy' as the MIME type.

    Everything should work as required:

    /*global angular */
    (function (ng) {
      'use strict';
    
      var app = ng.module('ngLoadScript', []);
    
      app.directive('script', function() {
        return {
          restrict: 'E',
          scope: false,
          link: function(scope, elem, attr) 
          {
            if (attr.type==='text/javascript-lazy') 
            {
              var s = document.createElement("script");
              s.type = "text/javascript";                
              var src = elem.attr('src');
              if(src!==undefined)
              {
                  s.src = src;
              }
              else
              {
                  var code = elem.text();
                  s.text = code;
              }
              document.head.appendChild(s);
              elem.remove();
              /*var f = new Function(code);
              f();*/
            }
          }
        };
      });
    
    }(angular));
    
    0 讨论(0)
提交回复
热议问题