AngularJS 应用中的路线错误?
Wrong route in AngularJS app?
我正在使用相同的 html 页面来创建新的 rma 和编辑旧的。我正在尝试在 AngularJs 中实现路由,但是当从 rma 列表中选择编辑旧对象时它不起作用。
路由选择
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.when('/rma', {
templateUrl: 'views/rma.html',
controller: 'RmaCtrl'
})
.when('/rma/:rmaId', {
templateUrl: 'views/rma.html',
controller: 'RmaCtrl'
})
.when('/rma-list', {
templateUrl: 'views/rma-list.html',
controller: 'RmaListCtrl'
})
RMA 列表控制器
$scope.updateRma = function (rmaId) {
console.log("updateRma---->" +rmaId);
$location.path('/rma/'+rmaId);
console.log("2. ABSURL---->" +$location.absUrl());
// ABSURL---->http://localhost:8383/RmaClient/app/index.html#/rma-detail/%5Bobject%20Object%5D
};
rma-list.html
<td><a ng-click="updateRma(rma.rmaId)" class="btn btn-small btn-success">edit</a></td>
rma控制器rma.js
angular.module('rmaClientApp')
.controller('RmaCtrl',
function ($scope, $location, rmaService, $routeParams) {
console.log("------RmaCtrl------" +$routeParams.rmaId);
//When creating a new one, should be 0
$scope.editMode = ($routeParams.rmaId === "0");
if ($scope.editMode) {
console.log("----Creating a new RMA-----");
$scope.rma = rmaService.get({id: $routeParams.rmaId});
//console.log("$scope.rma --->" +$scope.rma);
$scope.rmaService = rmaService;
} else {
console.log("----Editing an old RMA rmaId: "+$routeParams.rmaId );
var rma = $scope.rma;
$scope.rma = rmaService.get({id: $routeParams.rmaId});
}
rmaService
angular.module('rmaServices', ['ngResource'])
.factory('rmaService', ['$resource',
function ($resource) {
return $resource(
'http://localhost:8080/RmaServer/webresources/com.sako.rma.rma/:rma:rmaId',
{},
{
update: { method: 'PUT', params: {id: 'rmaId'} }
});
}]);
问题
在服务器端,REST 服务工作正常,但是当我试图在客户端编辑 rma 编号 7 时,我只得到一个空白页面和错误消息。这个 link returns 正确的 rma whit ID=7 和 link 是:
http://localhost:8080/RmaServer/webresources/com.ako.rma.rma/7
当我尝试从网页中选择相同的 rma 时,link 如下:
http://localhost:8383/RmaClient/app/index.html#/rma/7
错误
------RmaCtrl------7 (12:28:34:557)
在app/scripts/controllers/rma.js:13
错误:[$resource:badcfg] 操作 get
的资源配置错误。预期响应包含一个对象但得到一个数组
http://errors.angularjs.org/1.3.15/$resource/badcfg?p0=get&p1=object&p2=array
错误线是这样的:$scope.rma = rmaService.get({id: $routeParams.rmaId});
您的资源 url 应该是
http://localhost:8080/RmaServer/webresources/com.sako.rma.rma/:id'
然后
http://localhost:8080/RmaServer/webresources/com.sako.rma.rma/:rma:rmaId'
因为你只传递了一个参数rmaId
angular.module('rmaServices', ['ngResource'])
.factory('rmaService', ['$resource',
function ($resource) {
return $resource(
'http://localhost:8080/RmaServer/webresources/com.sako.rma.rma/:id',
{id:"@id"},
{
update: { method: 'PUT', params: {id: 'rmaId'} }
});
}]);
我正在使用相同的 html 页面来创建新的 rma 和编辑旧的。我正在尝试在 AngularJs 中实现路由,但是当从 rma 列表中选择编辑旧对象时它不起作用。
路由选择
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.when('/rma', {
templateUrl: 'views/rma.html',
controller: 'RmaCtrl'
})
.when('/rma/:rmaId', {
templateUrl: 'views/rma.html',
controller: 'RmaCtrl'
})
.when('/rma-list', {
templateUrl: 'views/rma-list.html',
controller: 'RmaListCtrl'
})
RMA 列表控制器
$scope.updateRma = function (rmaId) {
console.log("updateRma---->" +rmaId);
$location.path('/rma/'+rmaId);
console.log("2. ABSURL---->" +$location.absUrl());
// ABSURL---->http://localhost:8383/RmaClient/app/index.html#/rma-detail/%5Bobject%20Object%5D
};
rma-list.html
<td><a ng-click="updateRma(rma.rmaId)" class="btn btn-small btn-success">edit</a></td>
rma控制器rma.js
angular.module('rmaClientApp')
.controller('RmaCtrl',
function ($scope, $location, rmaService, $routeParams) {
console.log("------RmaCtrl------" +$routeParams.rmaId);
//When creating a new one, should be 0
$scope.editMode = ($routeParams.rmaId === "0");
if ($scope.editMode) {
console.log("----Creating a new RMA-----");
$scope.rma = rmaService.get({id: $routeParams.rmaId});
//console.log("$scope.rma --->" +$scope.rma);
$scope.rmaService = rmaService;
} else {
console.log("----Editing an old RMA rmaId: "+$routeParams.rmaId );
var rma = $scope.rma;
$scope.rma = rmaService.get({id: $routeParams.rmaId});
}
rmaService
angular.module('rmaServices', ['ngResource'])
.factory('rmaService', ['$resource',
function ($resource) {
return $resource(
'http://localhost:8080/RmaServer/webresources/com.sako.rma.rma/:rma:rmaId',
{},
{
update: { method: 'PUT', params: {id: 'rmaId'} }
});
}]);
问题
在服务器端,REST 服务工作正常,但是当我试图在客户端编辑 rma 编号 7 时,我只得到一个空白页面和错误消息。这个 link returns 正确的 rma whit ID=7 和 link 是:
http://localhost:8080/RmaServer/webresources/com.ako.rma.rma/7
当我尝试从网页中选择相同的 rma 时,link 如下:
http://localhost:8383/RmaClient/app/index.html#/rma/7
错误
------RmaCtrl------7 (12:28:34:557)
在app/scripts/controllers/rma.js:13
错误:[$resource:badcfg] 操作 get
的资源配置错误。预期响应包含一个对象但得到一个数组
http://errors.angularjs.org/1.3.15/$resource/badcfg?p0=get&p1=object&p2=array
错误线是这样的:$scope.rma = rmaService.get({id: $routeParams.rmaId});
您的资源 url 应该是
http://localhost:8080/RmaServer/webresources/com.sako.rma.rma/:id'
然后
http://localhost:8080/RmaServer/webresources/com.sako.rma.rma/:rma:rmaId'
因为你只传递了一个参数rmaId
angular.module('rmaServices', ['ngResource'])
.factory('rmaService', ['$resource',
function ($resource) {
return $resource(
'http://localhost:8080/RmaServer/webresources/com.sako.rma.rma/:id',
{id:"@id"},
{
update: { method: 'PUT', params: {id: 'rmaId'} }
});
}]);