Как изменить значение параметров состояния с помощью $ transition $ .params - PullRequest
0 голосов
/ 21 мая 2018

Я определил state с $stateProvider, как вы можете видеть ниже:

(function() {
    'use strict';

    angular.module('app').config(stateConfig);

    function stateConfig($stateProvider) {
        $stateProvider
        .state('baseInformation', {
            parent: 'panel',
            url: 'baseInformation',
            params: {
                backFilters: null
            },
            views: {
                'panel': {
                    templateUrl: 'baseInformation.html',
                    controller: 'BaseInformationController',
                    controllerAs: 'vm'
                }
            }
        });
    }
})();

В другом контроллере я использую $state.go('baseInformation', {backFilters: 12}).Теперь я хочу изменить значение backFilters параметров с помощью следующего кода:

(function () {
    'use strict';

    angular.module('app').controller('BaseInformationController', BaseInformationController);

    function BaseInformationController($transition$, CommonUtils) {
        var vm = this;

        // updated question
        CommonUtils.checkParamtersAndLog($transition$);
        $transition$.params().backFilters = 20;

        // updated question
        CommonUtils.checkParamtersAndLog($transition$);
    }
})();

, но я получил следующее сообщение об ошибке:

TypeError: Невозможно назначить свойство только для чтения'backFilters' объекта '#'

Я также искал эту проблему, но не нашел пути, и она очень важна для меня.

ОБНОВЛЕНИЕ

Я использовал $transition$.params().backFilters в сервисе, основанном на его значении, может быть что-то вроде этого:

(function () {
    'use strict';
    angular.module('app').factory('CommonUtils', CommonUtils);

    function CommonUtils() {

        var service = {
            checkParamtersAndLog: checkParamtersAndLog
        };

        function checkParamtersAndLog(transition) {
            if(transition.params().backFilters == null) {
                console.log('backFilters is null');
            }
            else {
                console.log('backFilters is not null')
            }
        }

        return service;
    }
})();

и хочу изменить значение $transition$.params().backFilters на контроллерах.

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете справиться с этим, сохранив значение параметра backFilters в вашей службе CommonUtils с некоторыми функциями установки / получения.

(function () {
    'use strict';
    angular.module('app').factory('CommonUtils', CommonUtils);

    function CommonUtils() {
        var backFilters = null;

        var service = {
            checkParamtersAndLog: checkParamtersAndLog.
            setBackFilters: setBackFilters,
            getBackFilters: getBackFilters
        };

        function checkParamtersAndLog() {
            if(backFilters == null) {
                console.log('backFilters is null');
            }
            else {
                console.log('backFilters is not null')
            }
        }

        function setBackFilters(backFilterValue) {
            backFilters = backFilterValue;
        };

        function getBackFilters() {
            return backFilters;
        };

        return service;
    }
})();  

Затем вы можете изменить свой контроллер следующим образом:

(function () {
    'use strict';

    angular.module('app').controller('BaseInformationController', BaseInformationController);

    function BaseInformationController($transition$, CommonUtils) {
        var vm = this;
        CommonUtils.setBackFilters($transition$.params().backFilters);

        // updated question
        CommonUtils.checkParamtersAndLog();
        CommonUtils.setBackFilters(20);

        // updated question
        CommonUtils.checkParamtersAndLog();
    }
})();

И если вы хотите сбросить значение на ноль при выходе из состояния, добавьте это к вашему провайдеру состояния:

onExit: function() { 
    CommonUtils.setBackFilters(null);
}
...