Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular js,从服务传递对象_Javascript_Angularjs - Fatal编程技术网

Javascript Angular js,从服务传递对象

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

当我单击/trip/new时,它会保存在TripCreateController中,并在CurrtTripService中设置trip对象。 然后,当重定向到TripDayCreateContoller时,控制台.log(currtTripService.getTrip())返回“未定义”

是因为Trip是一个对象吗?如何修复此问题?

尝试以下方法:

'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

});