Javascript 喷油器角度误差

Javascript 喷油器角度误差,javascript,angularjs,ngresource,ngmock,Javascript,Angularjs,Ngresource,Ngmock,我的应用程序出现以下错误 错误:[$injector:unpr]$injector/unpr?p0=ProductResourceProvider%20%3C-%20ProductResource 我的场景如下,一个从Web服务获取信息的简单应用程序,但是如果没有实现Web服务,我希望使用ng mock加载产品 在我的头标签中,我使用了如下代码: <script src="//code.jquery.com/jquery-2.1.1.min.js" type="text/javascrip

我的应用程序出现以下错误

错误:[$injector:unpr]$injector/unpr?p0=ProductResourceProvider%20%3C-%20ProductResource

我的场景如下,一个从Web服务获取信息的简单应用程序,但是如果没有实现Web服务,我希望使用ng mock加载产品

在我的头标签中,我使用了如下代码:

<script src="//code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>    
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js" type="text/javascript"></script>
    <script src="//code.angularjs.org/1.3.2/angular-resource.min.js" type="text/javascript"></script>
    <script src="//code.angularjs.org/1.3.2/angular-mocks.js" type="text/javascript"></script>


    <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.11.2.js"c></script>
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet"/>|

    <!-- Application Script -->
    <script src="../Scripts/App/App.js" type="text/javascript"></script>

    <!-- Services -->
    <script src="../Scripts/App/Common/Services/common.services.js"  type="text/javascript"></script>
    <script src="../Scripts/App/Common/Services/productResource.js"></script>
    <script src="../Scripts/App/Common/Services/productResourceMock.js" type="text/javascript"s></script>

    <!--Controllers -->
    <script src="../Scripts/App/Products/ProductListCtrl.js" type="text/javascript"></script>
产品控制器,非常简单:

(function () {
    "use strict";
    angular
        .module("productManagement")
        .controller("ProductListCtrl",
                    ["ProductResource",
                    ProductListCtrl]);

    function ProductListCtrl(productResource) {
        var vm = this;

        productResource.query(function (data) {
            vm.products = data;
        });

        vm.showImage = false;

        vm.toggleImage = function () {
            vm.showImage = !vm.showImage;
        }
    }
}());
公共服务(具有ng资源)

然后是产品资源

   (function () {
        "use strict";

        angular
            .module("common.services")
            .factory("productResource",
                    ["$resource",
                     productResource]);

        function productResource($resource) {
            return $resource("/api/products/:productId")
        }

    }());

and finally product resource mock

(function () {
    "use strict";

    var app = angular
                .module("productResourceMock",
                        ["ngMockE2E"]);

    app.run(function ($httpBackend) {
        var products = [
            {
                "productId": 1,
                "productName": "Leaf Rake",
                "productCode": "GDN-0011",
                "releaseDate": "March 19, 2009",
                "description": "Leaf rake with 48-inch wooden handle.",
                "cost": 9.00,
                "price": 19.95,
                "category": "garden",
                "tags": ["leaf", "tool"],
                "imageUrl": "http://openclipart.org/image/300px/svg_to_png/26215/Anonymous_Leaf_Rake.png"
            },
            {
                "productId": 2,
                "productName": "Garden Cart",
                "productCode": "GDN-0023",
                "releaseDate": "March 18, 2010",
                "description": "15 gallon capacity rolling garden cart",
                "cost": 20.00,
                "price": 32.99,
                "category": "garden",
                "tags": ["barrow", "cart", "wheelbarrow"],
                "imageUrl": "http://openclipart.org/image/300px/svg_to_png/58471/garden_cart.png"
            },
            {
                "productId": 5,
                "productName": "Hammer",
                "productCode": "TBX-0048",
                "releaseDate": "May 21, 2013",
                "description": "Curved claw steel hammer",
                "cost": 1.00,
                "price": 8.99,
                "category": "toolbox",
                "tags": ["tool"],
                "imageUrl": "http://openclipart.org/image/300px/svg_to_png/73/rejon_Hammer.png"
            },
            {
                "productId": 8,
                "productName": "Saw",
                "productCode": "TBX-0022",
                "releaseDate": "May 15, 2009",
                "description": "15-inch steel blade hand saw",
                "cost": 6.95,
                "price": 11.55,
                "category": "garden",
                "tags": ["garden", "mower"],
                "imageUrl": "http://openclipart.org/image/300px/svg_to_png/27070/egore911_saw.png"
            },
            {
                "productId": 10,
                "productName": "Video Game Controller",
                "productCode": "GMG-0042",
                "releaseDate": "October 15, 2002",
                "description": "Standard two-button video game controller",
                "cost": 2.22,
                "price": 35.95,
                "category": "gaming",
                "tags": ["gaming", "controller", "video game"],
                "imageUrl": "http://openclipart.org/image/300px/svg_to_png/120337/xbox-controller_01.png"
            }
        ];

        var productUrl = "/api/products"

        $httpBackend.whenGET(productUrl).respond(products);

        var editingRegex = new RegExp(productUrl + "/[0-9][0-9]*", '');
        $httpBackend.whenGET(editingRegex).respond(function (method, url, data) {
            var product = {"productId": 0};
            var parameters = url.split('/');
            var length = parameters.length;
            var id = parameters[length - 1];

            if (id > 0) {
                for (var i = 0; i < products.length; i++) {
                    if (products[i].productId == id) {
                        product = products[i];
                        break;
                    }
                };
            }
            return [200, product, {}];
        });

        $httpBackend.whenPOST(productUrl).respond(function (method, url, data) {
            var product = angular.fromJson(data);

            if (!product.productId) {
                // new product Id
                product.productId = products[products.length - 1].productId + 1;
                products.push(product);
            }
            else {
                // Updated product
                for (var i = 0; i < products.length; i++) {
                    if (products[i].productId == product.productId) {
                        products[i] = product;
                        break;
                    }
                };
            }
            return [200, product, {}];
        });

        // Pass through any requests for application files
        $httpBackend.whenGET(/app/).passThrough();


    })
}());
(函数(){
“严格使用”;
有棱角的
.模块(“公共服务”)
.factory(“产品资源”,
[“$resource”,
产品资源),;
函数productResource($resource){
返回$resource(“/api/products/:productId”)
}
}());
最后是产品资源模拟
(功能(){
“严格使用”;
var app=角度
.module(“productResourceMock”,
[“ngMockE2E”];
app.run(函数($httpBackend){
var乘积=[
{
“productId”:1,
“产品名称”:“叶耙”,
“产品代码”:“GDN-0011”,
“发布日期”:“2009年3月19日”,
“说明”:“48英寸木柄叶耙”,
“成本”:9.00,
“价格”:19.95,
“类别”:“花园”,
“标记”:[“叶”、“工具”],
“imageUrl”:http://openclipart.org/image/300px/svg_to_png/26215/Anonymous_Leaf_Rake.png"
},
{
“productId”:2,
“产品名称”:“花园车”,
“产品代码”:“GDN-0023”,
“发布日期”:“2010年3月18日”,
“说明”:“容量为15加仑的滚动花园车”,
“成本”:20.00,
“价格”:32.99,
“类别”:“花园”,
“标签”:[“手推车”、“手推车”、“手推车”],
“imageUrl”:http://openclipart.org/image/300px/svg_to_png/58471/garden_cart.png"
},
{
“productId”:5,
“产品名称”:“锤子”,
“产品代码”:“TBX-0048”,
“发布日期”:“2013年5月21日”,
“说明”:“弯爪钢锤”,
“成本”:1.00,
“价格”:8.99,
“类别”:“工具箱”,
“标记”:[“工具”],
“imageUrl”:http://openclipart.org/image/300px/svg_to_png/73/rejon_Hammer.png"
},
{
“productId”:8,
“产品名称”:“Saw”,
“产品代码”:“TBX-0022”,
“发布日期”:“2009年5月15日”,
“说明”:“15英寸钢刃手锯”,
“成本”:6.95,
“价格”:11.55,
“类别”:“花园”,
“标签”:[“花园”、“割草机”],
“imageUrl”:http://openclipart.org/image/300px/svg_to_png/27070/egore911_saw.png"
},
{
“productId”:10,
“产品名称”:“视频游戏控制器”,
“产品代码”:“GMG-0042”,
“发布日期”:“2002年10月15日”,
“说明”:“标准双按钮视频游戏控制器”,
“成本”:2.22,
“价格”:35.95,
“类别”:“游戏”,
“标签”:[“游戏”、“控制器”、“视频游戏”],
“imageUrl”:http://openclipart.org/image/300px/svg_to_png/120337/xbox-controller_01.png"
}
];
var productUrl=“/api/products”
$httpBackend.whenGET(productUrl).response(products);
var editingRegex=newregexp(productUrl+“/[0-9][0-9]*”,“”);
$httpBackend.whenGET(editingRegex).respond(函数(方法、url、数据){
var product={“productId”:0};
var参数=url.split('/');
变量长度=parameters.length;
变量id=参数[长度-1];
如果(id>0){
对于(变量i=0;i
我检查了拼写,没有发现任何东西,所以我确定我在这里遗漏了什么

在我忘记剩下的html之前

 <div ng-app="productManagement" class="container">
        <div class="panel panel-primary">
            <div class="panel-heading"
                 style="font-size:large">Product
            List
            </div>

            <div class="panel-body">
                <table class="table" ng-controller="ProductListCtrl as vm">
                    <thead>
                    <tr>
                        <td>
                            <button type="button"
                                    class="btn btn-primary"
                                    ng-click="vm.toggleImage()">
                                {{vm.showImage ? "Hide" : "Show"}} Image
                            </button>
                        </td>
                        <td>Product</td>
                        <td>Code</td>
                        <td>Available</td>
                        <td>Price</td>
                    </tr>
                    </thead>
                    <tbody>
                    <tr ng-repeat="product in vm.products">
                        <td>
                            <img ng-if="vm.showImage"
                                    ng-src="{{product.imageUrl}}"
                                    style="width:50px;margin:2px"
                                    title="{{product.productName}}">
                        </td>
                        <td>{{ product.productName}}</td>
                        <td>{{ product.productCode }}</td>
                        <td>{{ product.releaseDate }}</td>
                        <td>{{ product.price | currency }}</td>
                    </tr>
                    </tbody>
            </table>
            </div>
        </div>
    </div>

产品
列表
{{vm.showImage?“隐藏”:“显示”}Image
产品
代码
可用
价格
   (function () {
        "use strict";

        angular
            .module("common.services")
            .factory("productResource",
                    ["$resource",
                     productResource]);

        function productResource($resource) {
            return $resource("/api/products/:productId")
        }

    }());

and finally product resource mock

(function () {
    "use strict";

    var app = angular
                .module("productResourceMock",
                        ["ngMockE2E"]);

    app.run(function ($httpBackend) {
        var products = [
            {
                "productId": 1,
                "productName": "Leaf Rake",
                "productCode": "GDN-0011",
                "releaseDate": "March 19, 2009",
                "description": "Leaf rake with 48-inch wooden handle.",
                "cost": 9.00,
                "price": 19.95,
                "category": "garden",
                "tags": ["leaf", "tool"],
                "imageUrl": "http://openclipart.org/image/300px/svg_to_png/26215/Anonymous_Leaf_Rake.png"
            },
            {
                "productId": 2,
                "productName": "Garden Cart",
                "productCode": "GDN-0023",
                "releaseDate": "March 18, 2010",
                "description": "15 gallon capacity rolling garden cart",
                "cost": 20.00,
                "price": 32.99,
                "category": "garden",
                "tags": ["barrow", "cart", "wheelbarrow"],
                "imageUrl": "http://openclipart.org/image/300px/svg_to_png/58471/garden_cart.png"
            },
            {
                "productId": 5,
                "productName": "Hammer",
                "productCode": "TBX-0048",
                "releaseDate": "May 21, 2013",
                "description": "Curved claw steel hammer",
                "cost": 1.00,
                "price": 8.99,
                "category": "toolbox",
                "tags": ["tool"],
                "imageUrl": "http://openclipart.org/image/300px/svg_to_png/73/rejon_Hammer.png"
            },
            {
                "productId": 8,
                "productName": "Saw",
                "productCode": "TBX-0022",
                "releaseDate": "May 15, 2009",
                "description": "15-inch steel blade hand saw",
                "cost": 6.95,
                "price": 11.55,
                "category": "garden",
                "tags": ["garden", "mower"],
                "imageUrl": "http://openclipart.org/image/300px/svg_to_png/27070/egore911_saw.png"
            },
            {
                "productId": 10,
                "productName": "Video Game Controller",
                "productCode": "GMG-0042",
                "releaseDate": "October 15, 2002",
                "description": "Standard two-button video game controller",
                "cost": 2.22,
                "price": 35.95,
                "category": "gaming",
                "tags": ["gaming", "controller", "video game"],
                "imageUrl": "http://openclipart.org/image/300px/svg_to_png/120337/xbox-controller_01.png"
            }
        ];

        var productUrl = "/api/products"

        $httpBackend.whenGET(productUrl).respond(products);

        var editingRegex = new RegExp(productUrl + "/[0-9][0-9]*", '');
        $httpBackend.whenGET(editingRegex).respond(function (method, url, data) {
            var product = {"productId": 0};
            var parameters = url.split('/');
            var length = parameters.length;
            var id = parameters[length - 1];

            if (id > 0) {
                for (var i = 0; i < products.length; i++) {
                    if (products[i].productId == id) {
                        product = products[i];
                        break;
                    }
                };
            }
            return [200, product, {}];
        });

        $httpBackend.whenPOST(productUrl).respond(function (method, url, data) {
            var product = angular.fromJson(data);

            if (!product.productId) {
                // new product Id
                product.productId = products[products.length - 1].productId + 1;
                products.push(product);
            }
            else {
                // Updated product
                for (var i = 0; i < products.length; i++) {
                    if (products[i].productId == product.productId) {
                        products[i] = product;
                        break;
                    }
                };
            }
            return [200, product, {}];
        });

        // Pass through any requests for application files
        $httpBackend.whenGET(/app/).passThrough();


    })
}());
 <div ng-app="productManagement" class="container">
        <div class="panel panel-primary">
            <div class="panel-heading"
                 style="font-size:large">Product
            List
            </div>

            <div class="panel-body">
                <table class="table" ng-controller="ProductListCtrl as vm">
                    <thead>
                    <tr>
                        <td>
                            <button type="button"
                                    class="btn btn-primary"
                                    ng-click="vm.toggleImage()">
                                {{vm.showImage ? "Hide" : "Show"}} Image
                            </button>
                        </td>
                        <td>Product</td>
                        <td>Code</td>
                        <td>Available</td>
                        <td>Price</td>
                    </tr>
                    </thead>
                    <tbody>
                    <tr ng-repeat="product in vm.products">
                        <td>
                            <img ng-if="vm.showImage"
                                    ng-src="{{product.imageUrl}}"
                                    style="width:50px;margin:2px"
                                    title="{{product.productName}}">
                        </td>
                        <td>{{ product.productName}}</td>
                        <td>{{ product.productCode }}</td>
                        <td>{{ product.releaseDate }}</td>
                        <td>{{ product.price | currency }}</td>
                    </tr>
                    </tbody>
            </table>
            </div>
        </div>
    </div>
(function () {
    "use strict";
    angular
        .module("productManagement")
        .controller("ProductListCtrl",
                    ["ProductResource",
                    ProductListCtrl]);

    function ProductListCtrl(productResource) {
        var vm = this;

        productResource.query(function (data) {
            vm.products = data;
        });

        vm.showImage = false;

        vm.toggleImage = function () {
            vm.showImage = !vm.showImage;
        }
    }
}());