Javascript Angular js,从服务传递对象
当我单击/trip/new时,它会保存在TripCreateController中,并在CurrtTripService中设置trip对象。 然后,当重定向到TripDayCreateContoller时,控制台.log(currtTripService.getTrip())返回“未定义” 是因为Trip是一个对象吗?如何修复此问题?尝试以下方法:Javascript Angular js,从服务传递对象,javascript,angularjs,Javascript,Angularjs,当我单击/trip/new时,它会保存在TripCreateController中,并在CurrtTripService中设置trip对象。 然后,当重定向到TripDayCreateContoller时,控制台.log(currtTripService.getTrip())返回“未定义” 是因为Trip是一个对象吗?如何修复此问题?尝试以下方法: 'use strict'; var app = angular.module('app'); app.factory('currTripServi
'use strict';
var app = angular.module('app');
app.factory('currTripService', function() {
var currtrip ='';
return{
setCurrTrip: function(trip){
currtrip = trip ;
},
getCurrTrip: function(){
return currtrip ;
},
}
});
app.controller('TripCreateController', function($scope, $location, Trip,currTripService) {
//The save method which is called when the user wants to submit their data
$scope.save = function() {
//Create the forum object to send to the back-end
var trip = new Trip($scope.trip);
console.log(trip);
currTripService.setCurrTrip(trip);
console.log(currTripService.getCurrTrip());
//Save the forum object
trip.$save(function() {
//Redirect us back to the main page
$location.path('/trip/day/1');
}, function(response) {
//Post response objects to the view
$scope.errors = response.data.errors;
});
}
});
app.controller('TripDayCreateController',function($scope,$routeParams,currTripService){
$scope.items=[];
$scope.trip = currTripService.getCurrTrip();
console.log($scope.trip.city);
// $scope.products = productService.getProducts();
$scope.addItem = function(item) {
$scope.items.push(item);
$scope.item = {};
}
});
当您声明一个函数时,
这个
作用域会发生变化,因此currtip只存在于getter/setter函数中,而不存在于函数外部。最好的方法是使用类。下面是CoffeeScript中的一个类示例
app.factory('currTripService', function() {
var currtrip = '';
var self = this;
return{
setCurrTrip: function(trip){
self.currtrip = trip ;
},
getCurrTrip: function(){
return self.currtrip ;
},
}
});
但是,如果您想在不使用类方法的情况下执行此操作,则可以使用模拟类的方法:
class currTripService
# storage object
@data = null
# get data
get: =>
return @data
# set data
put: (data) =>
@data = data
app.factory('currTripService', currTripService)
请注意:我将函数放在工厂之外,以模拟通常调用类的方式,但显然可以将所有代码放在函数声明中
var currTripService = function () {
// storage variable
var currTrip = null
// reference to this element
var _this = this
return{
// set this trip value
setCurrTrip: function(trip){
_this.currtrip = trip;
},
// get this trip value
getCurrTrip: function(){
return _this.currtrip;
},
}
}
app.factory('currTripService', currTripService);
@但是,您可能还希望将所有持久性功能移出控制器并移入服务中。
app.factory('currTripService', function () {
// logic
});