phi*_*dah 7 javascript angularjs
我正在尝试使用(最初)以下功能构建产品列表:
我目前的问题有很多问题,但主要的是我似乎无法以最佳方式分离观点.在页面更改时,更新类别列表(如果选中任何项目,则取消选中它们).
如何仅在加载页面时加载类别列表?
谢谢
index.html的:
<div ng-app="relv">
<div ng-view></div>
</div>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<script src="//cdn.jsdelivr.net/angularjs/1.0.2/angular-resource.min.js"></script>
<script src="/angular/app.js"></script>
<script src="/angular/services.js"></script>
<script src="/angular/controllers.js"></script>
<script src="/angular/filters.js"></script>
<script src="/angular/directives.js"></script>
Run Code Online (Sandbox Code Playgroud)
app.js:
'use strict';
angular.module('relv', ['relv.filters', 'relv.services', 'relv.directives']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/products', {templateUrl: '/angular/partials/product_list.html', controller: ProductListCtrl});
$routeProvider.when('/products/:page', {templateUrl: '/angular/partials/product_list.html', controller: ProductListCtrl});
$routeProvider.otherwise({redirectTo: '/products'});
}]);
Run Code Online (Sandbox Code Playgroud)
product_list.html:
<div id="category_list">
<label ng-repeat="category in categories">
<input type="checkbox" name="category" ng-model="filterCategories[category.id]"> {{ category.name }}
</label>
</div>
{{ filterCategories }}
Product list, page {{ page }}.
<br><br>
<ul>
<li ng-repeat="product in products">
<a href="#/product/{{ product.id }}">{{ product.name }}</a><br>
<span ng-repeat="category in product.categories">{{ category.name }}</span>
</li>
</ul>
<a href="#/products/{{ page-1 }}">Previous page</a>
<a href="#/products/{{ page+1 }}">Next page</a>
Run Code Online (Sandbox Code Playgroud)
controllers.js:
'use strict';
function ProductListCtrl($routeParams, $scope, ProductList, CategoryList) {
$scope.page = $routeParams.page ? parseInt($routeParams.page) : 1;
$scope.products = ProductList.query({'page': $scope.page});
$scope.categories = CategoryList.query();
$scope.filterCategories = {};
}
ProductListCtrl.$inject = ['$routeParams', '$scope', 'ProductList', 'CategoryList'];
Run Code Online (Sandbox Code Playgroud)
服务:JS:
'use strict';
angular.module('relv.services', ['ngResource']).
factory('Product', function($resource){
return $resource('http://endpoint/api_dev.php/products/:productId.json', {}, {
query: {method:'GET', params:{lang:'en'}, isArray:false}
});
}).
factory('ProductList', function($resource){
return $resource('http://endpoint/api_dev.php/products.json', {}, {
query: {method:'GET', params:{lang:'en', page: ':page'}, isArray:true}
});
}).
factory('CategoryList', function($resource){
return $resource('http://endpoint/api_dev.php/categories.json', {}, {
query: {method:'GET', params:{lang:'en'}, isArray:true}
});
})
;
Run Code Online (Sandbox Code Playgroud)
如果您始终希望类别列表可见,请将此代码放入index.html,<ng-view>上方:
<div id="category_list">
<label ng-repeat="category in categories">
<input type="checkbox" name="category" ng-model="filterCategories[category.id]"> {{ category.name }}
</label>
</div>
{{ filterCategories }}
Run Code Online (Sandbox Code Playgroud)
然后它不会改变路线变化 - 只有ng-view内的部分才会改变.
更新:将加载类别的代码放入新控制器:
function CategoryCtrl($scope, CategoryList) {
$scope.categories = CategoryList.query();
$scope.filterCategories = {};
}
Run Code Online (Sandbox Code Playgroud)
index.html的:
<div ng-controller="CategoryCtrl">
<div id="category_list">
<label ng-repeat="category in categories">
<input type="checkbox" name="category" ng-model="filterCategories[category.id]"> {{ category.name }}
</label>
</div>
{{ filterCategories }}
</div>
<div ng-app="relv">
<div ng-view></div>
</div>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10959 次 |
最近记录: |