Почему ng-scope добавляется в javascript, встроенный в мой частичный вид, и делает предупреждение неработающим?

Я использую AngularJs с системой шаблонов. Я хочу добавить определенный встроенный сценарий javascript в каждый шаблон, добавив окно предупреждения в отношении выбранной вкладки (Главная | Список | Настройки)

Html визуализирует: но добавляется ng-scope и ничего не предупреждает при смене вкладок.

<script type="text/javascript" class="ng-scope">alert("home")</script>

Я делаю пример доступным здесь:

http://bit.ly/HWcN1H

или здесь

пример plunkr с предупреждением("template1") в template1.html, но отображается как

<script type="text/javascript" class="ng-scope">alert("template1")</script>

person Julien DES    schedule 11.11.2013    source источник
comment
Это случайное закрытие/скрипт должно быть там?   -  person Mike Robinson    schedule 12.11.2013
comment
добавление класса в тег скрипта или любой другой тег не остановит запуск скрипта .... есть ли какой-либо текст внутри тега скрипта? Не удивлюсь, если его уберут, чтобы скрипты не писались сами по себе. jQuery делает то же самое со своим методом html(), удаляет все скрипты перед вставкой DOM   -  person charlietfl    schedule 12.11.2013
comment
У меня может быть такая же проблема, так как мое обновление до angular 1.2, мой код javascript больше не загружается с помощью частичного шаблона.   -  person Fabien Barbier    schedule 13.11.2013


Ответы (2)


Я улучшил решение Endorama на github.

Тот же процесс.

  1. Создайте angular-loadscript.js (по ссылке выше)
  2. в вашем приложении используйте «ngLoadScript» в качестве зависимости ресурса.

    var app = angular.module('ИМЯ_ВАШЕГО_ПРИЛОЖЕНИЯ', ['ngResource','ngRoute', ...,'ngLoadScript']);

  3. В вашем частичном использовании «text/javascript-lazy» в качестве типа MIME.

Все должно работать как надо:

/*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));
person Deepak    schedule 18.03.2014
comment
Я поместил несколько ленивых javascript в один и тот же файл, и порядок загрузки не соответствует =( - person Maslow; 02.06.2014
comment
улучшен? копипаст ты имеешь в виду - person caub; 05.10.2015
comment
Как сделать синхронный вызов? - person LennyLip; 09.01.2017

Существует решение путем кодирования директивы:

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();
        }
      }
    };
  });

частичное использование:

  <script type="text/javascript-lazy" >
alert("lazy loaded");
  </script>
person Julien DES    schedule 16.11.2013
comment
Есть ли способ сделать это, но при этом использовать атрибут src в теге script? - person Mastro; 19.04.2014