gpt4 book ai didi

javascript - View 的 AngularJS 路由问题

转载 作者:行者123 更新时间:2023-11-30 00:30:38 25 4
gpt4 key购买 nike

我正在尝试创建一个包含商店列表的单页应用程序,在每张商店卡片中都是指向另一个包含产品表的 View 的链接。

商店看起来像:

shop = {
id: 1,
name: "foo",
description: 'bar',
products: [item1, itemn];
};

应用程序.js:

angular
.module('lightpointTestApp', [
'ngCookies',
'ngRoute',
'ui.sortable'
])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.when('/about', {
templateUrl: 'views/about.html',
controller: 'AboutCtrl'
})
.when('/products/:shopID', {
templateUrl: 'views/products.html',
controller: 'ProductsCtrl'
})
.otherwise({
redirectTo: '/'
});
});

Main.html 查看商店列表在哪里:

<h3>Shop list</h3>
<div class="row shopsContainer" ui-sortable ng-model="shops">

<div class="col-lg-3 shopCard" ng-repeat="shop in shops">
<button class="btn close cardClose" ng-click="removeShop($index)">&times;</button>
<div class="cardNumber">{{ shops.indexOf(shop) + 1 }}</div>
<div class="cardHeader">{{ shop.name }}</div>
<div class="cardBody">
{{ shop.address }}<br />
{{ shop.hours }}<br />
<a href="/#/products/{{ shop.id }}">View {{ shop.products.length }} products</a>
</div>
</div>

</div>
<div class="row">
<input type="text" ng-model="newShop.name" placeholder="Shop name" class="col-lg-3" />
<input type="text" ng-model="newShop.address" placeholder="Shop address" class="col-lg-3" />
<input type="text" ng-model="newShop.hours" placeholder="Shop hours" class="col-lg-3" />
<button class="btn btn-primary col-lg-3" type="button" ng-disabled="!newShop.name || !newShop.address || !newShop.hours" ng-click="addShop()">Add Shop</button>
</div>

</span>
</div>
</div>

products.js - 产品页面的 Controller

angular.module('lightpointTestApp')
.controller('ProductsCtrl', function ($scope, $routeParams, shops) {
$scope.shopList = shops;
$scope.shop = {};

$scope.getShop = function (id) {
for (var i = 0; i < $scope.shopList.length; i++) {
if ($scope.shopList[i].id === id) {
return $scope.shopList[i];
}
}
return null;
};

var shopID = $routeParams.shopID;
$scope.shop = $scope.getShop(shopID);

})

products.html 产品表在哪里

<h2>{{ shop.name }}</h2>
<table class="table table-hover">
<tr>
<th>Product Name</th>
<th>Product Description</th>
</tr>
<tr ng-repeat="product in shop.products">
<td> {{ product.name }} </td>
<td> {{ product.description }} </td>
</tr>
</table>

问题是 products.html 没有与 products.js 绑定(bind)并显示类似 {{shop.name}} 的内容和一个空表。

附言我认为 products.js 不正确,但我已尽一切努力做好它。

谢谢。

最佳答案

您在 ProductsCtrl 中有一个参数 shops,但是没有任何东西可以为它传递值,因此它将是 null。您将 $scope.shopList 的值设置为它,然后尝试遍历 NULL 数组,因此您会得到一个异常。

您可以将 shops 的值存储在服务中,然后通过注入(inject)将它们传递给您的应用程序。您可以在 main.js 或服务本身中初始化它们的值,然后如果将它们注入(inject) ProductsCtrl 中,这些值将可用,类似于

angular.module('lightpointTestApp')
.controller('ProductsCtrl', ['$scope', '$routeParams', 'shopsService',
function ($scope, $routeParams, shopsService) {
$scope.shopList = shopService;
$scope.shop = {};

$scope.getShop = function (id) {

for (var i = 0; i < $scope.shopList.length; i++) {
if ($scope.shopList[i].id === id) {
return $scope.shopList[i];
}
}
return null;
};

var shopID = $routeParams.shopID;
$scope.shop = $scope.getShop(shopID);

}]);

shopsService 看起来像

angular.module('lightpointTestApp')
.service('shopsService', function() {
return [
// add whatever fields you need here from code in main.js
{ name: 'shop1', address: 'addr1' },
{ name: 'shop2', address: 'addr2' }
];
});

关于javascript - View 的 AngularJS 路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29683657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com