下午全部,
我们上周一直在努力学习AngularJS并需要一些指导,我们希望能够在路由之间存储数据,例如userName,brandName和productName。目前我们正在使用routeParams,但发现这很麻烦,不得不一遍又一遍地重复代码。
同样在第(3)节中,我们有formData,我们可以将这些数据存储在工厂中,这样我们可以在提交最终数据之前在品牌之间跳转并更新产品吗?当我们离开每个品牌时,它会删除我们输入的数据。
如果有人能提供帮助,我们会非常感激, 谢谢。
Plunker示例
var amlProductCtrl = angular.module('amlProductCtrl', []);
// (1) Employees
amlProductCtrl.controller('employees', ['$scope', '$http',
function($scope, $http) {
$http.get('json/employees.json').success(function(data) {
$scope.employees = data;
});
}
]);
// (2) Brands
amlProductCtrl.controller('brands', ['$scope', '$routeParams', '$http',
function($scope, $routeParams, $http) {
// UserName
$scope.employee = {"userName": $routeParams.userName};
// Welcome Message
$scope.alerts = [{
type: 'info',
msg: 'Hello ' + $scope.employee.userName + ', please select a brand.'
}];
$scope.closeAlert = function(index) {
$scope.alerts.splice(index, 1);
};
// Get JSON Data
$http.get('json/brands.json').success(function(data) {
$scope.brands = data;
});
}
]);
// (3) Products
amlProductCtrl.controller('products', ['$scope', '$routeParams', '$http',
function($scope, $routeParams, $http) {
// BrandName
$scope.brand = {"brandName": $routeParams.brandName};
// UserName
$scope.employee = {"userName": $routeParams.userName};
// Get JSON Data
var rpBrandName = $routeParams.brandName; // BrandName
var rsBrandName = rpBrandName.replace(/\s+/g, ''); // Remove Space
var lcBrandName = rsBrandName.toLowerCase(); // Lowercase
var brandName = lcBrandName;
$http.get('json/'+brandName+'-products.json').success(function(data) {
$scope.products = data;
});
// FormData
$scope.formData = {};
}
]);
答案 0 :(得分:3)
这是一个可行的解决方案。创建一个在控制器之间共享数据的服务。它使用$ watch所以可能不是最有说服力的解决方案。我也在学习,所以我能感受到你的痛苦: - )
myApp.factory('DataService', function () {
var myObject = {
id: 0, name: 'not set'
};
return {
brandName: function () {
return myObject.name;
},
setBrandName: function (brand) {
myObject.name = brand.name;
}
};
});
您可以构建对象以更好地反映您的需求。谷歌有很多文章提供解决方案。希望这可以帮助。检查这个plunker:http://plnkr.co/edit/9rw3kHCfwatqAw6TRQeW?p=preview转到#2并选择一个品牌。您会注意到其他2个更新到所选项目。