【问题标题】:UI router change templateUrl on clickUI 路由器在点击时更改 templateUrl
【发布时间】:2015-12-01 09:30:21
【问题描述】:

我试图创建一个动态 UI 路由器,当您每次单击按钮时,它需要返回带有 $stateParams.currentFloor 更改的 templateUrl,以便它可以在屏幕上的视图中得到更新。

目前我有:

我的设置:

app.config(function ($urlRouterProvider, $stateProvider) {

    $urlRouterProvider.otherwise('/');

    $stateProvider
        .state('home', {
            url: '/',
            views: {
                "menu-view": {
                    templateUrl: 'partials/menu.html'
                },
                "map-view": {
                    controller: 'mapViewController',
                    templateUrl: function ($stateParams) {
                        return 'partials/floors/floor-' +  $stateParams.currentFloor + '.html'
                    }
                }
            }
        })
});

我的控制器需要保存数据并将其传递给 templateUrl 函数

app.controller('mapViewController', function ($scope, $stateParams) {
    $scope.currentFloor = $stateParams.currentFloor;
    $scope.currentFloor = 1;
    $scope.addOne = function () {
        $scope.currentFloor = $scope.currentFloor + 1;
        return $stateParams.currentFloor = $scope.currentFloor;
    };
});

而且只是一个简单的函数,每次点击都会为范围增加 +1

<button ng-click="addOne()"></button>

我想我已经很接近了,但是我很难将数据从我的控制器传递到需要更改 templateUrl 的函数

【问题讨论】:

  • 你能做一个plunker吗?更改状态参数后,您需要重新加载状态
  • plnkr.co/edit/1xaMwcoyfAlz4zcE96TO?p=preview 甚至无法让笨蛋开始工作。我认为这是#状态
  • 您使用 angular 2 吗?
  • 哦,伙计们,我什至没看到我 quik 添加了 angular 2。我现在改不好
  • 我成功了,我会写一个答案

标签: javascript angularjs angular-ui-router


【解决方案1】:

检查更新的 plunker here

一种可能的解决方案:

 var app = angular.module('testTool', ['ui.router'])

  .config(function($urlRouterProvider, $stateProvider) {

     $urlRouterProvider.otherwise('/1');

     $stateProvider
        .state('home', {
            url: '/:currentFloor',
            views: {
                "menu-view": {
                 templateUrl: 'menu.html'
                 },
            "map-view": {
                templateUrl: function ($stateParams) {
                          return 'floor-' +  $stateParams.currentFloor + '.html'
                },
            controller: 'mapViewController'
         }, 
       }
      })
  })

  .controller('mapViewController', function($scope, $stateParams, $state) {

      $scope.addOne = function() {

          $state.go('home', {currentFloor : parseInt($stateParams.currentFloor) + 1}, {reload: true})

      };
  });

在 url 参数 (url:'/:currentFloor') 中添加参数 'currentFloor。然后用这个参数重新加载状态:$state.go('home', {currentFloor : 2}, {reload: true})

选项reload:true对于当你处于相同状态时ui路由器重新加载状态很重要。

如果你需要在 $stateParams 和你范围内的对象之间做一些工作,我建议你使用 resolve 函数。

【讨论】:

  • 令人印象深刻的东西,非常感谢,这正是我想要实现的目标!
【解决方案2】:

更改 $stateParams 后尝试添加$state.go($state.current, {}, {reload: true})

【讨论】:

  • 不行,我什至无法获取 templateUrl 函数中#$scope 内的所有数据
  • 如果你像这样传递参数$state.go($state.current, {yourParam: yourData }, {reload: true})
猜你喜欢
  • 1970-01-01
  • 2013-06-16
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多