2016-05-11 11 views
0

Я хочу использовать другой метод от другого контроллера в модуле Angularjs. У меня есть два контроллера один по имени: Книжный список Контроллер в bookApp Модуль. и еще один по имени ShowEachBook. В Booklist контроллера я создаю ViewItem() метод, который может быть доступен из View_A_book() метода в ShowEachBook Controller.Как получить доступ к контроллеру с другого контроллера в AngularJs

Вот мой контроллер в модуле BookApp

var bookApp = angular.module('bookApp', []); 

bookApp.controller('bookListCtr', function ($scope, $http) { 

    $scope.ViewItems = function ($id) { 
     $this->View_A_book($id);// This is example because I want to used View_A_book() method here 
    }; 
}) 

А вот ShowEachBook Контроллер

bookApp.controller('ShowEachBook', function ($scope, $http) { 

    $scope.View_A_book = function($id){ 
     /// get book from server. 
    } 
}) 
+1

Ваш вопрос немного трудно понять. Часть из него связана с языком, который я думаю (если это возможно, попробуйте пересмотреть свой первый абзац), а часть его состоит в том, что я не вижу, как ваш код можно использовать для создания [mcve]. Не могли бы вы проверить эту ссылку и попытаться как отрезать некоторые (лишние), так и добавить какой-то (необходимый) код? – Jeroen

+1

Метод View_A_Book должен быть создан в службе (вместо другого контроллера) и использовать эту службу в вашем контроллере. –

+0

Вы можете мне показать мне –

ответ

4

Создать фабрику. Вам нужно только определить его один раз, и его можно вводить и вызывать с любого контроллера. See this article.

-

сделать фабрику ViewBook и добавить функцию к нему: Ваш завод:

angular.module('bookApp') 
    .factory('ViewBook', function() { 
     return { 
      view_a_book: function(id) { 
       //do whatever you want to. 
       return something 
      }, 
     }; 
    }); 

Ваш контроллер:

var bookApp = angular.module('bookApp', []); 

bookApp.controller('bookListCtr', function ($scope, $http, ViewBook) { 

    $scope.ViewItems = function ($id) { 
     ViewBook.view_a_book($id); 
    }; 
}) 

Вы добавляете ссылку на завод с $scope и $http, и используйте это для его вызова. Это можно повторить для любых контроллеров, которые у вас есть.

0

Для обмена информацией betwen контроллеры используют Сервис. Но для вашего случая использования я sugess использовать ui-router с двумя состояниями: list и list.detail каждый из них с определенным контроллером. На url детализируйте карту id единственного элемента list/book/[id] и разрешите ittrought запрос API или список из родительского состояния.

1

Вы можете написать все методы или функции, общие для вашего проекта как службы. В угловом JS мы можем создать 2 вида услуги

  1. Фабрика
  2. Сервис

В вашей проблеме вы просто написать функцию «View_A_Book» как сервис и просто впрыснуть эту услугу в контроллер, который вы хотите использовать эту функцию.

Пожалуйста, обратитесь на ссылку ниже, чтобы получить представление о службе и фабрики

http://blog.thoughtram.io/angular/2015/07/07/service-vs-factory-once-and-for-all.html

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