@sfedosimov

Как сделать предзагрузку данных в AngularJS?

Стоит задача, при обновлении страницы подгружать данные из сесии. Делаю как показано ниже. В сессию на стороне сервера все кладется нормально, вытаскивается из сессии и кладется в this.selval тоже вроде нормально (судя по console.log), но на странице все сбрасывается, как будто из сессии ничего не подгрузилось. В чем может быть проблема?

var app = angular.module('MainApp', []);
app.controller('MainCtrl', function ($http) {
    this.selval = {};

   this.getfromsess = function () {
        $http({
            method: 'POST',
            url: '/ajax/',
            data: {action: 'getsess'},
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
        }).then(function (result) {
            if (result.data.sess) {
                this.selval = result.data.sess;
                console.log(this.selval);
            }
        }, function (error) {
            console.log(error);
        });
    };

    this.init = function () {
        this.getfromsess();
     };
    this.init();

     this.fruit_items = [{
        name: 'Яблоко',
        id: 'apple'
    }, {
        name: 'Груша',
        id: 'pear'
    }];

    this.vegetable_items = [{
        name: 'Картошка',
        id: 'potato'
    }, {
        name: 'Помидор',
        id: 'tomato'
    }];

this.del = function (key) {
        var sv = {};

        for (i in this.selval) {
            if (i != key) {
                sv[i] = this.selval[i];
            }
        }

        this.selval = sv;

        this.savetosess();
    };

    this.slct = function (key, item) {
        this.selval[key] = item;
        this.savetosess();
    };

this.savetosess = function () {
        $http({
            method: 'POST',
            url: '/ajax/',
            data: {action: 'save', data: angular.toJson(this.selval)},
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
        }).then(function (result) {
            console.log(result);
        }, function (error) {
            console.log(error);
        });
    }

}


<div ng-app="MainApp">
            <div ng-controller="MainCtrl as main">
                <ul class="fs-ul-dynamic fs-ul-changed-list">
                    <li ng-show="main.selval.fruit">
                        <span class="fwb">Фрукт:</span> {{ main.selval.fruit.name }}
                        <a href="javascript:void(0);" ng-click="main.del('fruit')"></a>
                    </li>
                    <li ng-show="main.selval.ptypevegetable>
                        <span class="fwb">Овощ:</span> {{ main.selval.vegetable.name }}
                        <a href="javascript:void(0);" ng-click="main.del('vegetable')"></a>
                    </li>
   </div>
</div>

<div ng-hide="main.selval.fruit">
                    <span class="zagolovok-small">Фрукт:</span>
                    <ul class="fs-ul-dynamic">
                        <li ng-repeat="item in main.fruit_items" ng-click="main.slct('fruit', item)">
                            {{ item.name }}
                        </li>
                    </ul>
                </div>
                <div ng-hide="main.selval.vegetable">
                    <span class="zagolovok-small">Овощ:</span>
                    <ul class="fs-ul-dynamic">
                        <li ng-repeat="item in main.vegetable_items" ng-click="main.slct('vegetable', item)">
                            {{ item.name }}
                        </li>
                    </ul>
                </div>


if (isset($_POST)) {
        $postdata = @file_get_contents("php://input");
        $request = json_decode($postdata);

        if (is_object($request) || is_array($request)) {
            switch((string)$request->action) {
                case 'save':
                    $jdata = json_decode((string)$request->data);
                    if (is_object($jdata) || is_array($jdata)) {
                        $DATA->setSData('DATA', array('ajax' => ModD::objtoarray($jdata)));
                        $DATA->saveSData();
                        $sdata = $DATA->getSData('DATA');
                        die(json_encode(array('do' => 'none')));
                    } else {
                        die(json_encode(array('do' => 'none')));
                    }
                    break;
                case 'getsess':
                    $sdata = $DATA->getSData('DATA');
                    die(json_encode(array('sess' => $sdata['ajax']))));
                    break;
                default:
                    die(json_encode(array('do' => 'none')));
            }
        }
    }
  • Вопрос задан
  • 247 просмотров
Решения вопроса 1
AMar4enko
@AMar4enko
В коде selval в $scope, a в шаблоне пытаетесь его искать в main.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы