Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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 AngularJS意外请求ngmock_Javascript_Angularjs_Httpbackend_Ngmock - Fatal编程技术网

Javascript AngularJS意外请求ngmock

Javascript AngularJS意外请求ngmock,javascript,angularjs,httpbackend,ngmock,Javascript,Angularjs,Httpbackend,Ngmock,我在get/#/car/view/0上收到一个意外的请求错误,其中0是:carId 它用于ngMock后端上的基本angular crud应用程序。$httpBackend.whenGET(carUrl)工作并返回所有汽车的列表。addCar()也可以工作 我不知道获取详细视图有什么不对 我需要一些帮助来获取正确的url,并获得id的详细视图。显然,下面的代码可以工作,因为url是静态的,但我找不到使用id变量获取url的正确方法 代码: App.js window.app.controller

我在
get/#/car/view/0
上收到一个意外的请求错误,其中0是
:carId

它用于ngMock后端上的基本angular crud应用程序。
$httpBackend.whenGET(carUrl)
工作并返回所有汽车的列表。
addCar()
也可以工作

我不知道获取详细视图有什么不对

我需要一些帮助来获取正确的url,并获得id的详细视图。显然,下面的代码可以工作,因为url是静态的,但我找不到使用id变量获取url的正确方法

代码:

App.js

window.app.controller(‘carViewCtrl', ['$scope', '$routeParams', '$location', ‘CarService', function ($scope, $routeParams, $location, CarService) {
'use strict';

$scope.carId = $routeParams.carId;
initCar($scope.carId);

function initCar(carId) {
    CarService.showDetails(carId).then(function success(car) {
    $scope.car = car;
    }, function error(response) {

    });
   }
 }]);
路由:

.when('/car', {
        templateUrl: 'pages/car/car.html'

    })
    .when('/car/view/:carId', {
        templateUrl: 'pages/car/carView.html',
        controller: 'carViewCtrl',
        controllerAs: 'ctrl'
    })
    .when('/car/addCar', {
        templateUrl: 'pages/car/carAdd.html'
    })
app.run: 这就是我的模拟后端的定义

CarService.js

window.app.service(‘CarService', ['HTTPService', '$q', '$http', function (HTTPService, $q, $http) {
'use strict';

cars = [];
this.showDetails = function (carId){
    var deferred = $q.defer();

    HTTPService.get('/car/view/' + carId).then(function resolve(response){

    deferred.resolve(response.data);

    }, function reject(response){
        deferred.reject(response);
    });

    return deferred.promise;
};
carView.js

window.app.controller(‘carViewCtrl', ['$scope', '$routeParams', '$location', ‘CarService', function ($scope, $routeParams, $location, CarService) {
'use strict';

$scope.carId = $routeParams.carId;
initCar($scope.carId);

function initCar(carId) {
    CarService.showDetails(carId).then(function success(car) {
    $scope.car = car;
    }, function error(response) {

    });
   }
 }]);
carList.html

<tr ng-repeat=“car in cars track by $index">
        <td>{{$index}}</td>
        <td><a href=“/#/car/view/{{car.id}}”>{{car.id}}</a></td>
        <td>{{car.name}}</td>
        <td>edit</td>
</tr>

$httpBackend.的url是
字符串
正则表达式
或函数时,返回true或false

因此,您只提供了一个不匹配的字符串,您需要提供一个匹配的正则表达式,例如
/\/\\\\/car\/view\/(.+)/

要访问使用正则表达式捕获的数据,需要指定与捕获组对齐的参数

$httpBackend.whenGET(/\/#\/car\/view\/(.+)/, undefined, undefined, 
    ['carID'])
.respond(function(method, url, data, headers, params) {
     return [200, {myReponse: 'this worked'}
});
要了解更多详细信息,请访问:

正则表达式参数匹配 如果期望或定义使用正则表达式匹配URL,则可以通过params参数提供键数组。数组中每个键的索引将与正则表达式中某个组的索引匹配

回调中的params对象现在将具有具有这些键的属性,这些键保存正则表达式中相应组的值

这也适用于when和expect快捷方式方法

这意味着对于
expect
when
(例如
whenGET
)方法,可以使用正则表达式匹配url。然后,对于
()
块中的每个捕获组,您可以将其存储在变量中,该变量将传递给params对象中的回调


因此,作为一个工作示例,请看。作为旁注,angular Mock的旧版本似乎不支持此功能,因为我遇到了一个错误,即angular v1.2.23未定义
carId
的url为
$httpBackend.whenGET
字符串
regex
或函数时,返回true或false

因此,您只提供了一个不匹配的字符串,您需要提供一个匹配的正则表达式,例如
/\/\\\\/car\/view\/(.+)/

要访问使用正则表达式捕获的数据,需要指定与捕获组对齐的参数

$httpBackend.whenGET(/\/#\/car\/view\/(.+)/, undefined, undefined, 
    ['carID'])
.respond(function(method, url, data, headers, params) {
     return [200, {myReponse: 'this worked'}
});
要了解更多详细信息,请访问:

正则表达式参数匹配 如果期望或定义使用正则表达式匹配URL,则可以通过params参数提供键数组。数组中每个键的索引将与正则表达式中某个组的索引匹配

回调中的params对象现在将具有具有这些键的属性,这些键保存正则表达式中相应组的值

这也适用于when和expect快捷方式方法

这意味着对于
expect
when
(例如
whenGET
)方法,可以使用正则表达式匹配url。然后,对于
()
块中的每个捕获组,您可以将其存储在变量中,该变量将传递给params对象中的回调


因此,作为一个工作示例,请看。作为旁注,angular Mock的旧版本似乎不支持此功能,因为我得到了一个错误,
carId
没有为angular v1.2.23定义,谢谢您的回复。我刚试过,现在它给了我
未定义的carId
。我不完全理解如何访问数据,你能再解释一下吗??谢谢@乔伊·西卡诺维兹,你能再解释一下吗。我也遇到了同样的问题。谢谢!我让它工作了。我没有使用plunker,当我尝试实现它时,它导致了一些错误,但是通过遵循您链接的文档,我解决了我的问题。谢谢回复。我刚试过,现在它给了我
未定义的carId
。我不完全理解如何访问数据,你能再解释一下吗??谢谢@乔伊·西卡诺维兹,你能再解释一下吗。我也遇到了同样的问题。谢谢!我让它工作了。我没有使用plunker,当我尝试实现它时,它导致了一些错误,但是通过遵循您链接的文档,我解决了我的问题。