如何从AngularJs中的另一个控制器访问控制器

时间:2016-05-11 05:15:00

标签: javascript angularjs twitter-bootstrap

我想在Angularjs模块中使用另一个Controller的另一个方法。 我在 bookApp 模块中有两个名为: Booklist 控制器的Controller。 另一个名为 ShowEachBook 。 在 Booklist 控制器中,我创建 ViewItem()方法,可以从 ShowEachBook 控制器中的 View_A_book()方法访问该方法。

这是我在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.
  }
})

3 个答案:

答案 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添加对工厂的引用,并使用它来调用它。对于您拥有的任何控制器,都可以重复此操作。

答案 1 :(得分:1)

您可以将项目中常用的所有方法或功能编写为服务。在角度js中,我们可以创建两种类型的服务

  1. 服务
  2. 在您的问题中,您只需将函数“View_A_Book”编写为服务,然后将此服务注入您要使用该函数的控制器。

    请参阅以下链接以了解服务和工厂

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

答案 2 :(得分:0)

分享控制器使用服务之间的信息。但是对于您的用例,我会使用ui-router两个状态:listlist.detail,每个状态都有特定的控制器。在详细信息的网址上映射单个项id的{​​{1}},并从父状态解析ittrought API请求或列表数组。