2016-06-07 5 views
0

Я новичок в угловой, я все еще пытаюсь многому научиться, есть одна вещь, с которой я столкнулся, нужно знать, могу ли я использовать ссылку, контроллер, скомпилировать все вместе внутри одной директивы?с помощью ссылки, компиляции и функции контроллера вместе в директиве

Например, это пример, который я работаю в какой-либо директиве, наблюдая за выходом, я натолкнулся, что эта функция ссылки не работает. Любая причина для этого не работать, или я совершил явную ошибку.

КОД

angular.module('app').directive('movies', function() { 
    return { 
    templateUrl: "movieCard.html", 
    restrict: "EA", 
    scope: { }, 
    link: function(scope, element, attrs) { 
     console.log("link function called"); 
    }, 
    controller: function($scope) { 
     console.log("controller function called"); 
    }, 
    compile: function(elem,attrss){ 
     console.log("compile function called"); 
    } 
    } 

}) 

Я создал функцию Link Plunker

ответ

1

является частью функции компиляции. Если вы определили компиляцию, вы переопределите функцию компиляции, функцию предварительной ссылки и функцию пост-ссылки. Вы можете написать функцию компиляции, как это:

compile: function(elem,attrss){ 
    console.log("compile function called"); 
    return { 
     pre: function() { console.log("pre link function called"); }, 
     post: function() { console.log("post link function called, it's the same of link function"); } 
    } 
} 

Так что бесполезно определенной ссылки в директиве, если переопределить функцию компиляции. И ссылка не будет вызвана. Я создаю небольшой плункер, чтобы проиллюстрировать его https://plnkr.co/edit/hbel2uGzbyp0VHfQS4pN?p=preview.

Угловое вызов функции в таком порядке:

  • Создать область для директивы (в зависимости от конфигурации)
  • Разбор DOM сверху вниз (Еогеасп узел в DOM)
    • вызова компиляции функция
    • функция управления вызовом
    • вызов функции предварительной связи
  • Анализировать DOM снизу вверх
    • вызов функции пост ссылку

Я рекомендую вам прочитать этот пост Angular directives - when and how to use compile, controller, pre-link and post-link

+0

хорошо получил точку, но все же нужно знать, почему это не мы переходим сферы в функции компиляции в качестве параметра, и если до и после являются части функции компиляции, как получилось, что мы можем передайте область непосредственно в pre и post.I меня только путают сейчас. –

+0

Я написал просто мою функцию предварительной и пост-ссылки, но угловой передал сообщение и предварительно использовал несколько параметров, таких как область. Я редактирую плункер с параметрами – Silvinus

0

После того, как DOM готов, угловые JS процессы dom и итерации по элементам и связанным вызовам Функция компиляции (которые реализуют изменения уровня шаблона) и один экземпляр элемента Ментов создаются тогда функция связи (по умолчанию пост ссылка) называется

  1. Pre ссылка - реализовать логику, которая будет выполнена, когда AngularJS уже скомпилирован дочерние элементы.
  2. Почтовый перевод - он вызывается в обратном порядке, чтобы убедиться, что все дочерние ребенка итерируются перед родителем.

Таким образом, в случае ng-repeat, если мы хотим внести изменения во все элементы, тогда мы должны добавить этот код в функцию компиляции else, если уровень экземпляра, чем в функции ссылки, т.е.может быть несколько экземпляров элементов, но есть только один элемент шаблона.

См http://www.jvandemo.com/the-nitty-gritty-of-compile-and-link-functions-inside-angularjs-directives/

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