2014-11-26 2 views
0

В директиве мы можем определить изолята рамки так, что он может быть использован повторноInit анонимной функция директивы, например

var app = angular.module('myModule',[]) 
.directive('btn',[function(){ 
    return { 
     ..., 
     scope:{} 
    } 
}]); 

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

<scope> 
    <btn></btn> 
    <btn></btn> 
</scope> 

Однако, если <btn> имеет такие события, как «щелчок», «зависать» и т.д., и те события должны быть определены в рамках или контроллера в самом первом начале. Если у меня много <btn>, и они размещаются в разных файлах, я должен определить столько обработчиков, сколько числа <btn> в одном файле. Это означает, что на странице приходится загружать множество ненужных функций.

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

<scope> 
    <btn>this_btn.click=function(){alert(1)}</btn> 
    <btn>this_btn.hover=function(){alert(0)}</btn> 
<scope> 
+0

здесь ничего не мешает использовать собственные директивы как 'нг-click', то есть' <БТН нг-клик = ""> '. Вы пытались использовать их? – user2943490

+0

Да, я знаю это, но проблема такая же. Для использования ng-click мне все равно необходимо определить функцию в начале в директиве или области. однако, как только я определяю конкретную функцию в директиве, ее больше нельзя использовать повторно. – panda

+0

Если конкретная функция должна быть разделена между несколькими директивами, эта функция должна быть в службе и вводиться в соответствующие ей директивы. Его не нужно определять в директиве или в области. – user2943490

ответ

1

Не определяйте функции в html. scope - абстракция DOM; он представляет его часть, поэтому добавление функций в область действия - это угловой способ помещения их в DOM.

Тем не менее, вы можете просто добавить поведение в уже существующие директивы.

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app> 
 
    <input type="text" ng-model="text"> 
 
    {{text}} 
 
    <btn ng-click="text = 1">on click</button> 
 
    <btn ng-mouseenter="text = 2"> on hover</button> 
 
</div>

+0

Да, я пробовал. Но, похоже, не может принимать анонимную функцию как атрибуты, такие как ng-click = "(function() {alert (0)})()". он будет генерировать исключения. – panda

+1

Я настоятельно советую вам против этого. Зачем вам этот спагетти? – Roger

+0

, потому что я пытаюсь найти способ нормализовать его. Если существует способ инициировать экземпляр директивы, он может минимизировать загрузку и обслуживание. Например, btn.init ({click: sth}) или btn.init ({hover: sth}). Я просто могу использовать «требовать» для достижения цели. – panda

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