2014-01-10 3 views
0

Я хочу иметь функцию обратного вызова по директиве, которую я написал, не создавая изолированный объем. Директива просто делает элемент изменяемым по размеру и, следовательно, не нуждается в отдельной области (и желательно, чтобы у меня не было выделенной области в этом случае, я думаю).Функция обратного вызова в угловой директиве

Каков наилучший способ для этого? Я попробовал,

.controller("MyController", function ($scope) { 
    $scope.myFunc = function() { 
     console.log("test"); 
    }; 
}) 
.directive('resizeable', function ($document, $parse) { 
    return function (scope, element, attr) { 
     var func = $parse(attr.onFunc); 
    } 
} 

с

<div class="main" resizeable="" on-Func="myFunc()"> 

Как это сделать?

Попробуйте JSFiddle.

+1

короткий ответ - это вызов '' 'func (scope);' '' в вашей директиве, см. Мой полный ответ ниже. – mmattax

ответ

2

Вы близки, вот что я хотел бы сделать:

.directive('resizeable', ['$document', '$parse', function ($document, $parse) { 
    return { 
     link: function ($scope, $element, $attrs) { 
     var func = $parse($attrs.resizeable); 

     // do stuff... 

     func($scope); 
     } 
    }; 
}]); 

И HTML будет:

<div data-resizeable="myFunc()"></div> 

Вот рабочий пример: http://plnkr.co/edit/as6Tylj0zPpjVsUaDDC6?p=preview

+0

, похоже, не работает, http://jsfiddle.net/xcorat/Lj95P/10/, что я делаю неправильно? – xcorat

+0

@xcorat обновлен рабочей демонстрацией. – mmattax

+0

thx, он работает, я только что забыл 'ng-' в 'ng-controller', и передача« scope »была единственной вещью, которая отсутствовала у моего ex. – xcorat

0
on-Func="myFunc" 

Без скобок. И в директиве:

var func = scope[attr.onFunc]; 

Директива находится в том же объеме, что и контроллер. Таким образом, вы можете напрямую обратиться к функции.

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