使用AngularJS在数组中编辑不是string-object

时间:2015-03-23 08:30:25

标签: javascript arrays angularjs rest

我是AngularJS的新人,只是学习。

问题

我想在该列表中编辑一个rma。我按下编辑按钮并调用控制器funtcion updateRma(rma)。按下rma编号11后,我的绝对网址是“http://localhost:8383/RmaClient/app/index.html#/rma-detail/11

  1. 我应该更改什么才能使用rma对象的正确数据打开我的rma-detail.html页面?现在我总是回到index.html。
  2. $ location.path( '/ RMA-细节/' + RMA);可能是问题所在。如果我关闭“+ rma”,我可以在没有rma数据的情况下更正rma-detail页面。
  3. 我有一个来自Java Rest服务的rmas列表:

    <rmas>
    <rma>
    <an8>22</an8>
    <created>2012-02-28T19:28:54+02:00</created>
    <dsc1>dsc1</dsc1>
    <dsc2>dsc2</dsc2>
    <rma>1</rma>
    <sarjanro>serial</sarjanro>
    <shortdesc>shortdesc</shortdesc>
    <tuotenro>tuotenro</tuotenro>
    <user>USER</user>
    </rma>
    </rmas>
    

    作为JSON:

    an8: 22,
    created: "2012-02-28T19:28:54",
    dsc1: "dsc1",
    dsc2: "dsc2",
    rma: 1,
    sarjanro: "serial",
    shortdesc: "shortdesc",
    tuotenro: "tuotenro",
    user: "USER"
    

    查看

    <tbody>
            <tr ng-repeat="rma in rmas">
                <td>{{ rma.rma}}</td>
                <td>{{ rma.sarjanro }}</td>
                <td>{{ rma.an8}}</td>
                <td>{{ rma.user }}</td>
                <td>{{ rma.created}}</td>
                <td>{{ rma.tuotenro }}</td>
                <td><a ng-click="updateRma(rma)" class="btn btn-small btn-success">edit</a></td>
                <td><a ng-click="deleteRma(rma.rma)" class="btn btn-small btn-danger">delete</a></td>
            </tr>
        </tbody>
    

    CONTROLLER

      angular.module('rmaClientApp')
         .controller('RmaListCtrl', function ($scope, $location, rmaService) {        
                $scope.rmas = rmaService.query();
                /* callback for ng-click 'updateRMA': */
                $scope.updateRma = function (rma) {
                    $location.path('/rma-detail/'+rma);
                    console.log("2. ABSURL---->" +$location.absUrl());
                    // ABSURL---->http://localhost:8383/RmaClient/app/index.html#/rma-detail/%5Bobject%20Object%5D
    
                };
         });
    

    服务

    angular.module('rmaServices', ['ngResource'])
        .factory('rmaService', ['$resource',
            function ($resource) {
                return $resource(
                        'http://localhost:8080/Rma/webresources/com.demo.rma.rma/:rma:id',
                        {},
                        {
                            update: { method: 'PUT', params: {id: '@rma'} }
                        });
            }]);
    

    ROUTEPROVIDER

    .config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl'
      })
      .when('/about', {
        templateUrl: 'views/about.html',
        controller: 'AboutCtrl'
      })
      .when('/rma-list', {
        templateUrl: 'views/rma-list.html',
        controller: 'RmaListCtrl'
      })
      .when('/rma-detail', {
        templateUrl: 'views/rma-detail.html',
        controller: 'RmaDetailCtrl'
      })
      .otherwise({
        redirectTo: '/'
      });
    

    });

    Glassfish中的REST服务

    @GET
    @Path("{id}")
    @Produces({"application/json"})
    public Rma find(@PathParam("id") Integer id) {
        return super.find(id);
    }
    
    @GET
    @Override
    @Produces({"application/json"})
    public List<Rma> findAll() {
        return super.findAll();
    }
    

1 个答案:

答案 0 :(得分:1)

不是发送整个对象,而是将rma字段作为密钥发送:

$location.path('/rma-detail/'+rma.rma);
//http://localhost:8383/RmaClient/app/index.html#/rma-detail/1

更改路由,以便可以将rma读取为param

.when('/rma-detail/:rmaId', {
templateUrl: 'views/rma-detail.html',
controller: 'RmaDetailCtrl'
})

然后在RmaDetailCtrl控制器中,您可以从路径参数获取rmaId

//Remember to inject the $routeParams in controller's constructor
var rma = $routeParams.rmaId; //1
//Call the get rma detail from API

出于简单的学习目的,不要使用$ resource。请改用$ http:

var rma = $routeParams.rmaId; //1
$http.get('/Rma/webresources/com.demo.rma.rma/?id=' + rma).success(function(result) {
    console.log(result);
});

//Use $http.get for update