Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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 在AngularJS中使用AngularUI引导打开路由中的模式_Javascript_Angularjs_Angular Ui Bootstrap_Angular Ui Router - Fatal编程技术网

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();
    }