2014-10-14 4 views
0

Я создаю сторонний виджет, который будет загружен на несколько сайтов. Я использую угловой для реализации, с скриптом сборки, который обертывает мой угловой, поэтому он не мешает другим угловым, которые могут быть использованы на странице.Перекрытие угловых приложений/построение стороннего виджета с угловым

Все работает нормально, когда я использую свои собственные директивы, но когда я попытался включить индикатор загрузки, используя ng-show, он «иногда» не работал. Я отслеживал «иногда» до «на страницах, которые уже используют угловые».

Похоже, что углы по-прежнему привязаны к моим шаблонам, когда они вставлены на страницу. Могу ли я сделать мой дом зоной no-go для угловой страницы?

ng-non-bindable похоже, что это может сработать, но если я использую это, я не могу загрузиться под ним.

+0

У меня нет убедительных доказательств против этого, но я бы настоятельно советовал против объединения Углового с вашей библиотекой. Угловая любит контролировать страницу, поэтому, если Angular уже загружен, я ожидаю, что будут смешные вещи, например. две инициализации (угловая и угловая). Кроме того, размер Angular не является незначительным; если вам действительно нужно связать его с вашей библиотекой, возможно, попробуйте создать пользовательскую сборку, чтобы исключить все, что вам не нужно. И, возможно, у вас есть 2 сборки, один из которых связан с Angular для пользователей без углов, один простой, как модуль Angular, для пользователей, которые уже используют Angular. –

+0

Проблема в том, что если я контрейлером на угловой странице страницы, я не знаю, какая она версия. Мне нужен мой «виджет» (он намного больше, чем виджет), чтобы работать, даже если они меняют угловые версии, или если они находятся на угловом 1.0 или что-то старое. –

+0

Конечно, ты прав. Но у меня все еще плохое чувство * об объединении Angular в библиотеке. Просто мои 2 цента, как они говорят ... (Лично я бы предпочел * потребовать * минимальную Угловую версию.) –

ответ

0

Что вам нужно сделать, так это сделать загрузку угловой программно, вместо использования тега.

<html> 
    <body> 
     // other parts of your site 
     <div></div> 



     // your angular stuff 
     <div id='app' ng-controller="MyController"> 
     Hello {{greetMe}}! 
     </div> 
    </body> 
    </html> 



     // your controller 
     angular.module('myApp', []) 
      .controller('MyController', ['$scope', function ($scope) { 
      $scope.greetMe = 'World'; 
      }]); 

     // bootstrap angular programatically/manually 
     angular.element('#id').ready(function() { 
      angular.bootstrap(angular.element('#id'), ['myApp']); 
     }); 

Не забывая использовать нг-нон-Привязываемое тоже на части, что и не хотят связывать ofcoz

+0

Я уже загружаю вручную. Проблема в том, что «внешнее» приложение по-прежнему привязано к «внутренним» директивам приложения. –

0

Итак, вот что я сделал, что является мерзостью. Я бы предпочел чистый ответ, но это защищает мой дом от другого углового экземпляра.

Во-первых, я завершаю весь элемент dom ng-non-bindable. Это препятствует тому, чтобы угловой сигнал на уровне страницы мешал ему.

Тогда, я добавлю следующее, адаптированный AngularJS - how to override directive ngClick

var root = angular.module('rootModule', []); 
root.config(function($provide){ 
    $provide.decorator('ngNonBindableDirective', 
     ['$delegate', function($delegate){ 
      $delegate.shift(); 
      return $delegate; 
     }]); 
}); 

Это снимает реализацию ng-non-bindable внутри моего углового экземпляра. Таким образом, угловая страница будет игнорировать dom, но мой угловой не будет игнорировать ее. Я просто надеюсь, что мне не нужно будет делать ng-non-bindable-really позже по линии.

Кто-то, пожалуйста, спаси меня от этого ужаса, дав мне чистый ответ!

Смежные вопросы