我试图在每次单击按钮时创建一个动态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
最佳答案
检查更新的监听器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:'/:currentFloor')
中添加参数'currentFloor。然后使用以下参数重新加载状态:$state.go('home', {currentFloor : 2}, {reload: true})
当您处于相同状态时,选项
reload:true
对于ui路由器重新加载状态很重要。如果需要在$ stateParams和作用域中的对象之间做一些工作,建议您使用resolve函数。