2017-02-20 2 views
0

Я моя директива определяется следующим образом:Угловой 1 пользовательская директива не выполняется

'use strict;' 

angular.module('clientApp') 

.directive('afterLast', ['$ocLazyLoad','$timeout',function($ocLazyLoad, $timeout){ 
    console.log('entered directive'); 
    return { 
     restrict: 'A', 
     link: function(scope, elem, attr){ 
      if (scope.$last === true){ 
       console.log('entered directive') 
       $timeout(function(){ 
        $ocLazyLoad.load(['some files']) 
       }) 
      } 
     } 
    } 
}]); 

И, я использую его в качестве атрибута следующим образом:

<div ng-repeat="topicObject in module.topics track by $index" afterLast> 

    <div class="ft-section"> 

    <div ng-repeat="learningPointObject in topicObject.learningPoints track by $index"> 
     <div class="ft-page"> 
      <h2 class="module-name" style="text-align: center;">{{module.name | capitalize:true}}</h2> 
      <h3 class="topic-name">{{topicObject.name | capitalize:true}}</h3> 
      <h4>{{learningPointObject.name | capitalize}}</h4> 
      <hr> 
     </div> 
    </div> 

    </div> 

</div> 

Но моя директива не выполняется. Даже инструкции console.log внутри и вне функции ссылки не работают. 1. Правильно ли я использую директивы? 2. Если да, то какими могут быть причины для этого не работает?

+1

В HTML-элемент, ваша директива ссылается 'после last', не' afterLast' – Phil

+0

да, это было то, что я пропустил. Спасибо :) –

ответ

3

В HTML название директивы должно быть в кебабе, а не в camelCase.

<!-- ERRONEOUS camelCase 
<div ng-repeat="topicObject in module.topics track by $index" afterLast> 
--> 

<!-- USE kebab-case --> 
<div ng-repeat="topicObject in module.topics track by $index" after-last> 

Для получения дополнительной информации см AngularJS Developer Guide - Directive Normalization

+0

спасибо, это работает. –

0

директиву: за последние часы нг-повтор .. app.directive ('afterLast', функция() { возвратного { ограничить: 'A' , объем: {}, ссылка: функция (область применения, элемент, ATTRS) { если (attrs.ngRepeat) { если { если (attrs.afterLast == '' (сфера $ родителя $ последнего..)!) { if (typeof scope. $ Parent. $ Parent [attrs.afterLast] === 'functio n ') { // Выполняет определенную функцию scope. $ parent. $ parentattrs.afterLast; } else { // Для наблюдателя, если вы предпочитаете scope. $ Parent. $ Parent [attrs.afterLast] = true; } } } } else { throw 'ngRepeatEndWatch: ngRepeat Директива, необходимая для использования этой Директивы'; } } } });

вызов функции на последнем вызове

$ scope.layoutDone = функция() {

вы хотите, чтобы ваши данные Дезире здесь

}

HTML

{{module.name | capitalize: true}} {{topicObject.name | capitalize: true}} {{learningPointObject.name | капитализировать}}
Смежные вопросы