Ответы пользователя по тегу Angular
  • Как получить доступ к дочерним элементам в директиве?

    @kostiknoir
    angular
      .module('app', [])
      .directive('myDirective', function() {
        return {
          restrict: 'A',
          scope: {},
          link: function(scope, el) {
            var childItems = el[0].querySelectorAll('.item');
            childItems = Array.prototype.slice.call(childItems);
    
            childItems.forEach(function(node) {
              console.log(node);
            });
          },
          transclude: true,
          template: '<div class="directive-div" ng-transclude></div>'
        };
      });
    Ответ написан
    Комментировать
  • Должно ли быть больше одного модуля в приложении angular?

    @kostiknoir
    Модуль по сути это пространство имен в данном случае именами будут сервисы, директивы, контроллеры и т.д.


    Неверно. Например если есть

    file1.js

    var m1 = angular.module('module1', []);
    m1.service('myService', function() {});


    file2.js
    var m2 = angular.module('module2', []);
    m2.service('myService', function() {});


    то в зависимости от того, кто будет загружен последним, тот и перепишет определение сервиса с именем myService

    Для того, чтобы избежать подобной ситуации нужно добавлять пространство имён в имя сервиса. Т.е.
    var m1 = angular.module('module1', []);
    m1.service('module1.myService', function() {});
    
    var m2 = angular.module('module2', []);
    m2.service('module2.myService', function() {});


    ----------------------
    Ответ по теме:

    Технически объявлять что-либо в отдельном модуле имеет смысл только в том случае если это будет использоваться где-то ещё. Т.е. если создаётся библиотека или набор повторно используемых компонентов (сервисов, фильтров, директив и т.д.).
    Если же компоненты (сервисы, фильтры, директивы и т.д.) будут использоваться только для данного приложения то не существует причины для того чтобы объявлять компоненты в другом модуле.
    Angular.js с версией 1.* не делает различий между одноимёнными компонентами, которые определены в разных модулях.
    Ответ написан
    Комментировать
  • Почему transclude не работает с input?

    @kostiknoir
    angular.module('app').directive('rtNumber', [
      function() {
        return {
          restrict: 'A',
          link: function($scope, $el) {
            var wrapper = document.createElement('div');
            wrapper.className = 'wrap';
            
            var el = $el[0];
            el.parentNode.insertBefore(wrapper, el);
            wrapper.appendChild(el);
          }
        };
      }
    ]);
    Ответ написан
    7 комментариев