2016-01-05 5 views
0

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

Мой код такой, как показано ниже.

app.directive('collection', function() { 
    return { 
     restrict: "E", 
     replace: true, 
     scope: { 
      collection: '=', 
      articleData: '=', 
      articleContent: '=' 
     }, 
     template: "<ul><member ng-repeat='member in collection' member='member' article-data='articleData' article-content='articleContent'></member></ul>" 
    } 
}); 

app.directive('member', function($compile,$http) { 
    return { 
     restrict: "A", 
     replace: true, 
     scope: { 
      member: '=', 
      articleData: '=', 
      articleContent: '=' 
     }, 
     template: "<div><li><a href='#' ng-click='getContent(member.itemId)'>{{member.title}}</a></li></div>", 
     link: function(scope, element, attrs) { 
      scope.getContent = function(itemId) { 

       scope.testFunction(itemId); 
      } 

      if (angular.isArray(scope.member.tocItem)) { 
       if (scope.member.hasChildren == "true") { 
        for (var i = 0; i < scope.member.tocItem.length; i++) { 
         if (scope.member.tocItem.title) { 
          scope.member.tocItem.title.hide = true; 
         } 
        } 
       } 
       element.append("<collection collection='member.tocItem'></collection>");  
       $compile(element.contents())(scope) 
      } 
     } 
    } 
}); 

app.controller('apdController', function($scope, getTocService,$location) { 
    var bookId = $location.search().id; 
    var sampdata = getTocService.getToc(bookId); 
    $scope.tasks =sampdata; 
    //$scope.tasks = data; 

    var artData = getTocService.getArtData('PH1234'); 
    $scope.articleContent = artData; 

    $scope.testFunction = function(itemId){ 
     alert("called....."); 
     } 
}); 

Вот я пытаюсь вызвать функции теста из link.From функции теста, я планирую вызвать службу отдыха. Но получение undefined не является функциональной ошибкой. Может кто-нибудь помочь? Также, пожалуйста, дайте мне знать, это правильный подход (от функции связи до контроллера и от контроллера для отдыха. Поскольку моя временная линия меньше, я не мог придумать какой-либо другой подход)

+1

Посмотрите на '$ emit' и/или' $ broadcast', это то, что вам нужно. – SjaakvBrabant

ответ

0

Что делает testFunction? У вас разные варианты. Если testFunction звонит в службу отдыха, вам обязательно нужно переместить его в службу.

app.factory('restService', function($http) { 
    function testFunction(itemId){ 
     // Whatever you need 
     return $http.get('myUrl'); 
    } 

    return { 
     testFunction: testFunction 
    } 
}); 

Затем вводят его в директиве

app.directive('member', function($compile, $http, restService) { 
    ... 
    link: function(scope, element, attrs) { 
     scope.getContent = function(itemId) { 
      restService.testFunction(itemId); 
     } 

     .... 
    } 
}); 

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

+0

от testFunction позвоню. AS теперь, я поставил предупреждение, чтобы увидеть, что контроль подходит к этому методу. – Sanjay

+0

вы можете установить оповещение внутри restService –