Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript UI路由器更改模板单击URL_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

Javascript UI路由器更改模板单击URL

Javascript UI路由器更改模板单击URL,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我试图创建一个动态用户界面路由器,当你每次点击一个按钮时,它需要返回带有$stateParams.currentFloor更改的templateUrl,这样它才能在屏幕上的视图中得到更新 目前我有: 我的设置: app.config(function ($urlRouterProvider, $stateProvider) { $urlRouterProvider.otherwise('/'); $stateProvider .state('home', {

我试图创建一个动态用户界面路由器,当你每次点击一个按钮时,它需要返回带有$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的函数中。

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

检查更新的plunker

一种可能的解决办法:

 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参数中添加参数“currentFloor”(url:“/:currentFloor”)。然后使用以下参数重新加载状态:
$state.go('home',{currentFloor:2},{reload:true})

选项
reload:true
对于ui路由器在相同状态下重新加载状态非常重要


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

您能做一个plunker吗?您需要在更改状态参数后重新加载状态。这些参数甚至无法使plunker开始工作。我认为这是与“你与angular 2合作的状态”有关?哦,伙计们,我甚至没看到我加入了angular 2。我现在改的不好我成功了我会写一个答案不行,我甚至无法在templateUrl函数中获得#$范围内的所有数据如果你像这样传递参数
$state.go($state.current,{yourParam:yourData},{reload:true})
哇,令人印象深刻的东西,非常感谢,这正是我想要实现的!