我想在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.
}
})
答案 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中,我们可以创建两种类型的服务
在您的问题中,您只需将函数“View_A_Book”编写为服务,然后将此服务注入您要使用该函数的控制器。
请参阅以下链接以了解服务和工厂
http://blog.thoughtram.io/angular/2015/07/07/service-vs-factory-once-and-for-all.html
答案 2 :(得分:0)
分享控制器使用服务之间的信息。但是对于您的用例,我会使用ui-router
两个状态:list
和list.detail
,每个状态都有特定的控制器。在详细信息的网址上映射单个项id
的{{1}},并从父状态解析ittrought API请求或列表数组。