2015-07-27 3 views
1

я следующий в директивеAngularJS ngClick стрелять услугу, но не

scope.actions = { 
    getSearch: searchResultPageService.getSearch(scope.keywords, scope.settings) 
}; 

Шаблон выглядит следующим образом

<button class="btn btn-primary" type="button" data-ng-click="actions.getSearch()">Send</button> 

В моей службы я только проверять, если scope.keywords и scope.settings передаются с помощью console.log, но нет выхода.

, что я делаю неправильно с моим использованием ngClick

(function() { 

    'use strict'; 

    angular 
     .module('app.search') 
     .factory('searchResultPageService', [ 
      '$timeout', 
      function ($timeout) { 
       var $module = { 

        getSearch: function(keywords, settings){ 
         console.log(keywords); 
         console.log(settings); 
+0

Вы как раз влияете на searchResultPageService.getSearch (scope.keywords, scope.settings) result to actions.getSearch. Это не метод, за исключением случаев, когда searchResultPageService.getSearch (scope.keywords, scope.settings) возвращает метод - я немного сомневаюсь. Вам просто нужно попробовать следующее: scope.actions = { getSearch: function() {searchResultPageService.getSearch (scope.keywords, scope.settings)}); }; – Nico

ответ

2

scope.actions.getSearch результат возвращается от вызова searchResultPageService.getSearch, а не саму функцию.

Вам либо нужно передать ссылку на эту функцию к представлению:

scope.actions = { 
    getSearch: searchResultPageService.getSearch 
}; 

и изменить обработчик щелчка вашей точки зрения, как показано ниже:

<button class="btn btn-primary" type="button" data-ng-click="actions.getSearch(keywords, settings)">Send</button> 

Или создать новую анонимную функцию, которая отправляется на просмотр:

scope.actions = { 
    getSearch: function() { 
     searchResultPageService.getSearch(scope.keywords, scope.settings); 
    } 
}; 

В этом случае ваш код просмотра останется прежним. Лично я бы выбрал второй вариант.

+0

Я вижу, что вы здесь делали, но при модульном тестировании было бы проще объявить функцию анона в сервисе? – ngplayground

+0

@ Donald Не соответствует вашим требованиям. Утверждение для анонимной функции здесь будет заключаться в том, что 'getSearch' вызывается с ожидаемыми значениями scope.keywords и scope.settings. Это будет частью тестов вашего контроллера. 'searchResultPageService.getSearch' будет протестирован отдельно как часть ваших сервисных тестов. – CodingIntrigue

0

Вы просто затрагивающий

searchResultPageService.getSearch(scope.keywords, scope.settings) 

результат в

actions.getSearch 

Это не метод, освобожденный если

searchResultPageService.getSearch(scope.keywords, scope.settings) 

возвращение метод - Я немного сомневаюсь -

Просто попробуйте :

scope.actions = { 
    getSearch: function() { 
    searchResultPageService.getSearch(scope.keywords, scope.settings); 
    } 
}; 
Смежные вопросы