Angularjs 如何立即更新angular ui.router嵌套状态?
我试着用angularjs,webpack2制作模式弹出窗口 但是有些问题困扰着我 我想使模式弹出,有自定义的网址,但 在模式弹出窗口中,Angularjs 如何立即更新angular ui.router嵌套状态?,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我试着用angularjs,webpack2制作模式弹出窗口 但是有些问题困扰着我 我想使模式弹出,有自定义的网址,但 在模式弹出窗口中,$state.current仍然指示父级的状态 我搜索了onEnter函数,当状态转换完成时调用。 同时,莫代尔的状态没有更新。(我认为这就是莫代尔状态表示家长状态的原因) 我可以使用setTimeout函数获取模态自己的状态和状态参数,但这只是一个技巧,对吗 如何以正确的方式获取modal的状态 === 这是我的app.js // HOME .st
$state.current
仍然指示父级的状态
我搜索了
onEnter
函数,当状态转换完成时调用。
同时,莫代尔的状态没有更新。(我认为这就是莫代尔状态表示家长状态的原因)
我可以使用setTimeout函数获取模态自己的状态和状态参数,但这只是一个技巧,对吗
如何以正确的方式获取modal的状态
===
这是我的app.js
// HOME
.state('home', {
url: '/',
templateUrl: 'client/pages/home/home.html',
controller: 'HomeController',
})
// PLAYER MODAL
.state('player', {
url: 'player/:playerName',
parent: 'home',
onEnter: function($stateParams, $state, $uibModal) {
$uibModal.open({
templateUrl: 'client/pages/player/player.html',
resolve: {},
controller: 'PlayerController'
}).result.then(function (result) {
// $scope.$close
alert('result ->' + result);
}, function (result) {
// $scope.$dismiss
alert('dismiss ->' + result);
}).finally(function () {
// handle finally
return $state.go('home');
});
}
});
家庭控制器
angular.module('907degree')
.controller('HomeController', function ($scope, $state) {
$scope.state = $state.current;
$scope.players = ['messi', 'hazard', 'ronaldo'];
$scope.showModal = function (playerId) {
$state.go('player', { playerName: playerId });
};
})
还有游戏控制器
angular.module('907degree')
.controller('PlayerController', ($scope, $http, $state, $stateParams, itemService) => {
$scope.playerState = $state.current;
$scope.params = $stateParams.playerName;
$scope.item = itemService.get($stateParams.id);
$scope.ok = function () {
$scope.$close('clicked OK');
};
$scope.dismiss = function () {
$scope.$dismiss('clicked CANCEL');
};
$scope.checkState = function () {
console.log($state.current, $stateParams);
console.log($scope.playerName);
}
})
我认为我的回购比plunker更能解决这个问题。。就这样
git克隆hagfish1210@gitlab.com/hagfish1210/907degrees.git&npm安装&npm运行dev注入当前的
$transition$
onEnter: function($transition$, $state, $uibModal) {
$uibModal.open({
templateUrl: 'client/pages/player/player.html',
resolve: { $transition$: () => $transition$ },
controller: 'PlayerController'
}).result.then(function (result) {
// $scope.$close
alert('result ->' + result);
}, function (result) {
// $scope.$dismiss
alert('dismiss ->' + result);
}).finally(function () {
// handle finally
return $state.go('home');
});
}
在PlayerController中,询问转换的参数
angular.module('907degree')
.controller('PlayerController', ($scope, $http, $state, $transition$, itemService) => {
$scope.playerState = $state.current;
var params = $transition$.params();
$scope.params = params.playerName;
$scope.item = itemService.get(params.id);
$scope.ok = function () {
$scope.$close('clicked OK');
};
$scope.dismiss = function () {
$scope.$dismiss('clicked CANCEL');
};
$scope.checkState = function () {
console.log($state.current, params);
console.log($scope.playerName);
}
})
Transition
类公开了许多关于正在运行的转换的信息:我认为我的repo比plunker更能解决这个问题。。就这样。git clone&npm install&npm run Device如果您使用的是ui router 1.0,简单的答案是注入$transition$
,并从中获取到/从状态和到/从参数。注入$transition$到播放器控制器也对吗?你是我的救世主。非常感谢你,克里斯!