Angular重新加载窗口,然后进入新状态

时间:2018-07-30 16:02:24

标签: javascript angularjs state.go

背景

我有一个大型的角度应用程序,其中包含许多项目的多种形式。

我有动作对象列表。

这些动作具有模式形式。

这些动作形式的下拉菜单与一个动作与另一个动作不同。 (下拉菜单的内容取决于该操作是哪个公司的子公司)

除非我重新加载页面,否则这些下拉列表的内容不会更改。

问题

如何重新加载窗口然后进行state.go更改?

代码

  $scope.goToActionWizardFull = function(CUuid, AUuid) {
    $window.location.reload();
    $state.go('actionWizard', { companyUuid: CUuid, uuid: AUuid });
  }

当前问题:

该代码应该从cookie /本地存储/ etc中清除较旧的架构,以便下拉菜单显示当前操作的下拉菜单内容,而不是最后一个操作的下拉菜单内容。 然后,将您带到新操作的页面。

相反,此代码将用户带到actionWizard页面,然后将他们带回到公司页面。

额外的上下文

我正在从一个名为sharedVars的文件中加载下拉内容:

.controller('ActionController', function ($scope, $stateParams, $state, $window, sharedVars, Company, Action) {

我在这里加载它:

$scope.actionSchema = sharedVars.getActionSchema();

然后在此处进行更改:

$scope.actionSchema.properties.RDAInput.items.properties.input_location.enum = $scope.actionSchema.properties.RDAInput.items.properties.input_location.enum.concat(eachRDSchemaProperty['name'])

然后我加载表单。

全部在http://schemaform.io

编辑2

整个表单的HTML:

<form sf-schema="actionSchema" sf-form="actionForm" sf-model="actionModel" name="submittableActionForm">
</form>

编辑3

我的bower.json看起来像:

{
  "name": "isp",
  "appPath": "src/main/web",
  "moduleName": "ispApp",
  "version": "0.0.1",
  "dependencies": {
    "jquery": "2.1.1",
    "angular": "1.6.1",
    "json3": "3.3.2",
    "angular-ui-router": "0.4.1",
    "angular-resource": "1.6.1",
    "angular-sanitize": "1.6.1",
    "checklist-model": "0.10.0",
    "jsog": "1.0.7",
    "angular-schema-form": "^0.8.13",
    "angular-schema-form-bootstrap": "^0.2.0",
    "bootstrap": "3.3.7",
    "angular-cookies": "1.6.1"
  },
  "resolutions": {
    "angular": "1.6.9"
  },
  "install": {
    "path": "src/main/web/bower_components"
  }
}

所以,我没有ngRoute,但是我有angular-ui-router

编辑4

我尝试使用$ state重新加载,但是下拉列表仍然无法有效地重新加载。因此,这里的第一行似乎没有任何作用。

$state.go($state.current, {}, {reload: true});
$state.go('actionWizard', { companyUuid: CUuid, uuid: AUuid });

编辑5

这也不起作用:

$state.transitionTo($state.current, $stateParams, {
reload: true,
inherit: false,
notify: true
}) 
$state.go('actionWizard', { companyUuid: CUuid, uuid: AUuid });

编辑6

我在这里提出了一个新问题,我相信它离问题的核心越来越近:Reload a pages cache, then go to a new page

1 个答案:

答案 0 :(得分:0)

此答案仅在进入操作页面时使用$window来执行reload。但是避免使用散列进行递归。

    var currentHref = $window.location.href
    if (!currentHref.includes("refresh")) {
        $window.location.href = $window.location.href + "#refresh"
        $window.location.reload(true);
    }

下面的更多说明

此代码启用重定向后的完全重新加载。在进入新页面时运行。

第一次使用,URL不包含'refresh',因此$window.location.href更改为包含'refresh'。但是不会重新加载页面。只有重新加载页面并清除缓存后的行。但是,重新加载仅在添加哈希之后发生。

因此,我进行了完全重新加载,没有进入页面后会自动发生的无限循环