2014-02-09 3 views
0

Я создаю повторно используемый компонент/виджет в качестве директивы с использованием шаблона и изолированной области. Я хотел бы также иметь возможность отправить обратный вызов в директиву и вызвать его в виджетах. Это возможно? Что-то вроде ...AngularJS; Отправить функцию от родителя в области директивы

шаблон MainView: <my-widget callback="someFunction"></my-widget>

директива:

return { 
    restrict: 'E', 
    scope: { 
     callback: '=' 
    }, 
    templateUrl: '/partials/widget.html', 
} 

И шаблон:

<input type="text" ng-change="callback()" /> 

Так что, когда значение виджета меняется, это вызывает функция обратного вызова, которая была передана в основном виде

+0

Да, именно так мы это и сделали. – Satpal

+0

вы должны использовать обратный вызов: '&' вместо '=' – michael

ответ

1

Что вы ищете, это &. Quoting the old angular docs: «& или & attr - обеспечивает способ выполнения выражения в контексте родительской области».

Попробуйте это, как ваш код директивы:

return { 
    restrict: 'E', 
    scope: { 
     callback: '&' 
    }, 
    templateUrl: '/partials/widget.html', 
} 
+0

Я пробовал это, но теперь я получаю: http://docs.angularjs.org/error/$compile:ctreq?p0=ngModel&p1=ngИзменить – Abby

+0

он отлично работает, если я использую ng-init = "callback()", но он не может выполнить ng-change – Abby

0

Вы можете также $ наблюдать за ним в ссылке или контроллера.

.directive('myDirective', function() { 

    return { 
    restrict: 'E', 
    link: function(scope, element, attrs) { { 
     scope.$watch(attrs.myDirective, function(value){ ... }); 
    } 
    ... 
0

Оказывается, мне нужно сделать, как это было предложено и использовать &, а не =, но и это еще не будет работать, пока я не добавил нг-модель, а на мой вход:

<input type="text" ng-model="myValue" ng-change="callback()" /> 
Смежные вопросы