2016-03-07 2 views
1

Я использую угловую 1.4 и я создаю директиву/компонент, как новый помощник компонента:angularjs - изолированные области видимости в директиве и действия

var invoiceSearchComonent = ['invoiceDataService', function (invoiceDataService) { 
    return { 
    restrict: 'E', 
    scope: {}, 
    templateUrl: path.fromRoot("/application/invoices/views/invoicesearch.html"), 
    controller: InvoiceSearchController, 
    controllerAs: 'vm', 
    bindToController: true 
    }; 
}]; 

module.directive('invoicesearch', invoiceSearchComonent); 

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

Лучше всего использовать $emit, чтобы опубликовать событие, когда пользовательский ввод изменился? Мне действительно не нравится этот подход использования значений имен строк для публикации событий.

В реакции и ember, можно передавать функции действия вокруг, но я новичок, чтобы реагировать и не знаю, лучший способ достичь этого, кроме $emit.

ответ

2

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

var invoiceSearchComonent = ['invoiceDataService', function (invoiceDataService) { 
    return { 
    restrict: 'E', 
    scope: {userInput: '='}, 
    templateUrl: path.fromRoot("/application/invoices/views/invoicesearch.html"), 
    controller: InvoiceSearchController, 
    controllerAs: 'vm', 
    bindToController: true 
    }; 
}]; 

, а затем при помощи директивы

<invoice-search user-input=vm.userInput></invoice-search> 

, то всякий раз, когда переменная userInput изменяется внутри вашего шаблона директивы, это изменение приведет к внешней области.

Кроме того, вы можете перейти к функциям директив, используя аналогичный тип привязки (& заменяет =)