Angular - 存储和读取复选框列表,其中包含localStorage中的状态

时间:2016-07-26 17:07:03

标签: javascript angularjs json local-storage

我正在尝试在localStorage中存储一个带有每个复选框值的复选框列表,但是我总是在ng-repeat或Unexpected token o in JSON at position 1内得到一个dupes错误,我应该在对象上使用JSON.parse。

基本上这是一个我后来想要加载的选项列表,但我还想在访问菜单时加载状态,如果它们存在于localStorage中。

controller.js

 var initialAlarmColumns = [{
                    columnName: "Alarm",
                    value: true
                }, {
                    columnName: "Description",
                    value: true
                }, {
                    columnName: "Acknowledged by",
                    value: false
                }];

                if(localStorage.getItem('alarmColumns') === null){
                    localStorage.setItem('alarmColumns', JSON.stringify(initialAlarmColumns));
                    self.alarmColumns = initialAlarmColumns;
                }
                else{
                    self.alarmColumns = JSON.parse(localStorage.getItem('alarmColumns'));
                }

                self.setAlarmColumns = function(columnsChecked){
                    localStorage.setItem('alarmColumns', JSON.stringify(columnsChecked));
                };

optionsView.html

<ul class="alarmColumnOptions" ng-repeat="alarmOptions in $ctrl.alarmColumns">
    <li><label><input type="checkbox" name="alarmOptions.columnName" ng-model="alarmOptions.value" ng-change="$ctrl.setAlarmColumns($ctrl.alarmColumns)"> {{alarmOptions.columnName}}</label></li>
</ul>

由于我的应用程序中存在另一个不相关的问题,我使用的是简单的localStorage而非指令。

编辑:这是code preview in plunkr

1 个答案:

答案 0 :(得分:1)

发现了这个问题。我在ng-repeat中错过了$ index的跟踪。

Functor

js改变:

#include <boost/fusion/container/vector.hpp>
#include <string>
#include <boost/fusion/include/for_each.hpp>
#include <iostream>

struct Functor {
    template<typename T>
    void operator()(T& t) const{
        std::cout << typeid(t).name() << " -> " << t << std::endl;
        // Desired Output:
        // int -> 5 : 0
        // std::string -> test : 1
        // double -> 5.3 : 2
        // double -> 10. : 3
    }
};

int main(int argc, char**args) {
    typedef boost::fusion::vector<int, std::string, double, double> TData;
    TData v(5, std::string("test"), 5.3, 10.);
    boost::fusion::for_each(v, Functor());
}