Angularjs 在不同页面上存在的服务之间传递数据
Angularjs pass data in between services that exist on different pages
我有一个简单的书店示例,我正在为 angularjs 工作,我正在尝试将书籍 ID 从主页传递到编辑页面上的服务,以便可以呈现书籍详细信息。 我发生的事情是,当不同的页面调用休息服务时,我可以看到从我的 home' page with the correct book id being passed into the book service. However, I cannot seem to think of a way to have the
BookCtrl 加载该数据时命中了 rest 调用。 我期待的顺序是:
1) User enters a book ID to edit
2) User presses Search button
3) book.html page is loaded
4) BookEdit service is invoked with ID from Steps 1 and 2
5) ng-model for book loads data.
提前道歉,可能会出现一些错误,因为我从另一台计算机修改此代码,所以我无法复制/粘贴
代码如下:
首页.html
<div ng-controller="HomeCtrl">
<div>
<label for="query">Book to edit</label>
<input id="query" ng-model ="editBook.query">
<button ng-click="loadBookById()">Search</button>
</div>
</div>
首页.js:
var homeApp = angular.module('bookHome',['bookEdit']);
homeApp.controller('HomeCtrl',function($scope,$http,bookEditService)
{
$http.get('http://get/your/books/rest').success(function(data){
$scope.library = data;
});
$scope.editBook = {
query: '',
service:'bookEditService'
} ;
$scope.loadBookById = function()
{
$scope.$emit('loadBookById',{
query:$scope.editBook.query,
$service: $scope.editBook .service
}
$scope.$on('loadBookById', function(ev,search){
bookEditService.loadBook({
bookId: $scope.editBook.query
},
$scope.searchComplete,
$scope.errorSearching
);
});
$scope.searchComplete = function(results) {
$scope.results = results;
};
$scope.errorSearch= function(data,status,headers,config){
console.log(data);
// ...
};
}
书.html
<div ng-controller="BookCtrl" >
<div ng-model="details.title"></div>
<div ng-model="details.author"></div>
</div>
书编辑.js
var bookEditApp = angular.module('bookEdit',[]);
bookEditApp.service('loadBook',function($http){
return{
loadBookById: function(params,success,error){
$http({
url: 'http://path/to/book/editing',
method: 'GET',
params:{bookId: params.bookId}).success(function(data,status,headers,config)
{
var results = data;
success(results || []);
}).error(function(){
error(arguments);
});
}
};
});
bookEditApp.controller('BookCtrl',function($scope){
$scope.details = {
title: "",
author: ""
};
});
遵循您期望的顺序的替代方法是:
1)用户输入书籍ID并按下按钮
2) HomeCtrl 路由到 EditCtrl,输入的 id 作为路由参数(尚无需使用预订服务):
app.controller('HomeCtrl', function ($scope, $location) {
$scope.editBook = function () {
$location.path('/edit/' + $scope.id);
};
});
3) 加载 EditCtrl,检索路由参数并要求图书服务提供正确的图书:
app.controller('EditCtrl', function EditCtrl($scope, $routeParams, bookService, $location) {
$scope.loading = true;
bookService.getBookById($routeParams.id)
.then(function (result) {
$scope.book = result;
$scope.loading = false;
});
4)当书籍被加载时,模型($scope.book
)被填充并更新html
这是一个工作示例,希望能提供一些进一步的指导和想法:http://plnkr.co/edit/fpxtAU?p=preview
相关文章:
- 使用服务(AngularJS)在控制器之间共享数据
- 通过共享服务在两个不同ng应用程序中的控制器之间共享数据
- 使用工厂/服务在控制器AngularJS之间推送数组中的数据
- 如何在控制器之间共享来自休息服务的数据
- 通过服务在控制器之间同步数据
- 角度依赖注入,使用服务在模块之间传递值
- Angularjs 在不同页面上存在的服务之间传递数据
- 使用AngularJS服务将数据从一个html传输到另一个html(控制器之间的数据共享)
- 使用服务更新 2 个控制器之间的共享数据
- 如何在服务中定义数组并在 AngularJS 中的 2 个控制器之间共享它
- AngularJS:在控制器之间共享数据,具有服务和 restangular
- 通过服务在控制器之间共享$http对象
- 在两个不同的模块和两个不同的js文件之间共享服务
- $parse、$interpole和$compile服务之间的区别是什么
- 在AngularJS控制器和服务之间共享资源
- 如何在服务之间进行双向通信
- JavaScript和PHP中的Web服务之间的安全通信
- Backbone.js集合和带参数的Ruby on Rails服务之间的通信
- AngularJS:如何在两个隔离的控制器和一个共享服务之间创建一个双向数据绑定
- 服务之间的广播