Javascript 在AngularJS中使用AngularUI引导打开路由中的模式
我正在尝试做这里基本上已经回答过的事情 然而,我的解决方案行不通。我犯了一个错误Javascript 在AngularJS中使用AngularUI引导打开路由中的模式,javascript,angularjs,angular-ui-bootstrap,angular-ui-router,Javascript,Angularjs,Angular Ui Bootstrap,Angular Ui Router,我正在尝试做这里基本上已经回答过的事情 然而,我的解决方案行不通。我犯了一个错误 错误:[$injector:unpr]未知提供程序:$modalProvider我正在处理类似的问题,这是我的解决方案 HTML代码 <a ui-sref="home.modal({path: 'login'})" class="btn btn-default" ng-click="openModal()">Login</a> 家庭控制器 //... other code $scope.o
错误:[$injector:unpr]未知提供程序:$modalProvider我正在处理类似的问题,这是我的解决方案
HTML代码
<a ui-sref="home.modal({path: 'login'})" class="btn btn-default" ng-click="openModal()">Login</a>
家庭控制器
//... other code
$scope.openModal = function(){
$modal.open({
templateUrl: 'path/to/page.html',
resolve: {
newPath: function(){
return 'home'
},
oldPath: function(){
return 'home.modal'
}
},
controller: 'ModalInstanceController'
});
};
//... other code
最后是模态实例控制器。
此控制器将模式事件(打开/关闭)与URL路径更改同步
angular.module("app").controller('ModalInstanceController', function($scope, $modalInstance, $state, newPath, oldPath) {
$modalInstance.opened.then(function(){
$state.go(newPath);
});
$modalInstance.result.then(null,function(){
$state.go(oldPath);
});
$scope.$on('$stateChangeSuccess', function () {
if($state.current.name != newPath){
$modalInstance.dismiss('cancel')
}
});
});
我找到了一个方便的提示来让它工作。可能有一些警告,但对我来说很有效。您仍然可以传递结果
,但我不需要
使用最终
而不是,然后
为我解决了这个问题。我还必须将以前的状态存储在rootScope上,以便我们知道返回到什么
将以前的状态保存到$rootScope
$rootScope.previousState = 'home';
$rootScope.$on('$stateChangeSuccess', function(ev, to, toParams, from, fromParams){
$rootScope.previousState = from.name;
})
使用onEnter声明
$stateProvider.state('contact', {
url: '/contact',
onEnter: function ($state, $modal, $rootScope){
$modal.open({
templateUrl: 'views/contact.html',
controller: 'ContactCtrl'
}).result.finally(function(){
$state.go($rootScope.previousState);
})
}
});
嗨,我很难解决类似的问题。
然而,我能够解决它。
这是你可能需要的
app.config(function($stateProvider) {
$stateProvider.state("managerState", {
url: "/ManagerRecord",
controller: "myController",
templateUrl: 'index.html'
})
.state("employeeState", {
url: "empRecords",
parent: "managerState",
params: {
empId: 0
},
onEnter: [
"$modal",
function($modal) {
$modal.open({
controller: "EmpDetailsController",
controllerAs: "empDetails",
templateUrl: 'empDetails.html',
size: 'sm'
}).result.finally(function() {
$stateProvider.go('^');
});
}
]
});
});
为了普朗克。希望对您有所帮助。您可以创建一个状态,使用与页面相同的templateUrl
和controller
,在其中添加params
对象
$stateProvider
.state('root.start-page', {
url: '/',
templateUrl: 'App/src/pages/start-page/start-page.html',
controller: 'StartPageCtrl'
})
.state('root.login', {
url: '/login',
templateUrl: 'App/src/pages/start-page/start-page.html',
controller: 'StartPageCtrl',
params: {
openLoginModal: true
}
})
在页面的控制器中,使用此参数打开模式
.controller("StartPageCtrl", function($scope, $stateParams) {
if ($stateParams.openLoginModal) {
$scope.openLoginModal();
}
当您在应用程序依赖项中加载'ui.bootstrap'
时,控制器不需要将'$modal'
作为依赖项。你能试着把它取下来吗?(但将$modal
保留在控制器功能参数中);)不-现在我得到了ReferenceError:$modal未定义也进行了检查,以确保angular-ui-bootstrap.js在angular.js之后加载,并且它是OK的,并且不是'ui.bootstrap.modal'
与'ui.bootstrap'
分开的模块?也许可以尝试将其加载到您的应用程序或控制器依赖项中。我只使用angular ui引导中的模式,这就是我加载它的方式。我有完整的js-至少我相信我有-它包含以下行:.provider(“$modal”,function(){
这似乎在按back时不会关闭对话框
app.config(function($stateProvider) {
$stateProvider.state("managerState", {
url: "/ManagerRecord",
controller: "myController",
templateUrl: 'index.html'
})
.state("employeeState", {
url: "empRecords",
parent: "managerState",
params: {
empId: 0
},
onEnter: [
"$modal",
function($modal) {
$modal.open({
controller: "EmpDetailsController",
controllerAs: "empDetails",
templateUrl: 'empDetails.html',
size: 'sm'
}).result.finally(function() {
$stateProvider.go('^');
});
}
]
});
});
$stateProvider
.state('root.start-page', {
url: '/',
templateUrl: 'App/src/pages/start-page/start-page.html',
controller: 'StartPageCtrl'
})
.state('root.login', {
url: '/login',
templateUrl: 'App/src/pages/start-page/start-page.html',
controller: 'StartPageCtrl',
params: {
openLoginModal: true
}
})
.controller("StartPageCtrl", function($scope, $stateParams) {
if ($stateParams.openLoginModal) {
$scope.openLoginModal();
}