我有一个控制器根据第一个下拉框的选择填充第二个下拉框,虽然WebStorm将其视为语法错误,但这种方法效果很好。 我知道想要将格式fname的ID发布到我的会话存储中以使用其他地方,但是我已经尝试了下面的代码,我看到了值为
[object Object]
如果我使用
sessionStorage.setItem('format', $scope.formats);
和
未定义
如果我使用
sessionStorage.setItem(' format',$ scope.formats.id);
我也试过
sessionStorage.setItem('format', $scope.formats.formatType.id);
我什么都没有,甚至没有空值
如何在会话存储中正确添加ID到我的格式值?
完整代码
FirstModule.controller('dropDown', function ($scope) {
$scope.productsandformats = [
{
"name": "staff",
"format": [
{"Fname": "bill", "id": "1"},
{"Fname": "bob", "id": "2"},
{"Fname": "tom", "id": "3"}
]
},
{
"name": "managers",
"format": [
{"Fname": "dick", "id": "4"},
{"Fname": "jhon", "id": "5"}
]
},
{
"name": "directors",
"format": [
{"Fname": "willy", "id": "6"}
]
},
{
"name": "temp",
"format": [
{"Fname": "jeff", "id": "18"},
{"Fname": "billy", "id": "19"}
]
}];
$scope.productTypeChange = function () {
$scope.formats = $scope.productsandformats.find(ps => ps.name == $scope.formData.ProductType.name)
sessionStorage.setItem('format', $scope.formats.id);
}
});
为了进一步说明我如何获取ID,下面的代码允许用户从名称类型中选择一个fname,例如,如果选择人员,你得到账单,鲍勃和汤姆然后在你选择它之后,打印出来选择的名称和fname包括fname id,fname id是我需要发送到会话存储的
HTML
<div class="radio col-sm-6" style="margin-top: 0 !important;">
<label>
<input type="radio" ng-model="formData.type" value="Create" >
<span class="glyphicon glyphicon-unchecked">
</span>
Need to make a poster?
</label>
</div>
<div class="radio col-sm-6">
<label>
<input type="radio" ng-model="formData.type" value="Preview">
<span class="glyphicon glyphicon-eye-open">
</span>
Already have a poster?
</label>
</div>
答案 0 :(得分:1)
您无法存储object
,只能存储string
。
存储您需要的对象&#34; stringify&#34;它
var jsonItem = JSON.stringify($scope.formats);
sessionStorage.setItem('format', jsonItem);
然后要检索它,你需要解析它
var item = sessionStorage.getItem('format');
item = JSON.parse(item)
来自MDN Storage/setItem
storage.setItem(keyName, keyValue);
keyName 包含您想要的密钥名称的DOMString 创建/更新。
keyValue 包含您想要的值的DOMString 给出你正在创建/更新的密钥。
关于查找ID
当你这样做时
$scope.formats = $scope.productsandformats.find(ps => ps.name ==
$scope.formData.ProductType.name)
你得到一个具有这种结构的对象
{
"name": "staff",
"format": [
{"Fname": "bill", "id": "1"},
{"Fname": "bob", "id": "2"},
{"Fname": "tom", "id": "3"}
]
},
所以我想第一项的item.format[0].id
内包含id,后续项目依此类推。
format
是一个数组,因此如果您不首先选择所需的数组元素(例如id
),则无法直接访问format[0]
。
答案 1 :(得分:0)
所以我使用了上面的答案,但要达到我必须使用的ID
$scope.myFunc = function() {
var jsonItem = JSON.parse($scope.formData.formatType.id);
sessionStorage.setItem('format', jsonItem);
}
@Bolza答案很好,但我需要更多,所以不断挖掘和试验