抓取对象ID并插入会话存储Angular

时间:2017-07-07 13:51:59

标签: javascript angularjs session-cookies

我有一个控制器根据第一个下拉框的选择填充第二个下拉框,虽然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>

2 个答案:

答案 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答案很好,但我需要更多,所以不断挖掘和试验