javascript - AngularJS $uibModal 作为具有不同 Controller 的服务

标签 javascript html angularjs

我想了一会儿这个问题。

我想知道如何将不同类型的 Controller 和不同的 templateUrl 从 angularjs 添加到 $uibModal。这样你就没有那么多实际上做同样事情的代码。仅在不同的controller 和不同的template 上。

这是我到目前为止所做的:

vm.addDialogue = function () {
  vm.formData = {};

  var modalInstance = $uibModal.open({
    animation: true,
    templateUrl: 'views/modals/add.dialogue.html',
    controller: 'addDialogueController',
    controllerAs: 'vm',
    backdrop: 'static',
    resolve: {
      formData: function() {
          return vm.formData;
      },
      selectedTab: 1,
      editTime: false
    }
  });
};

vm.addProject = function(){
  vm.formData = {};

  var modalInstance = $uibModal.open({
    animation: true,
    templateUrl: 'views/modals/add.project.html',
    controller: 'addProjectController',
    controllerAs: 'vm',
    backdrop: 'static',
    resolve: {
      formData: function () {
        return vm.formData;
      }
    }
  });

    modalInstance.result.then(function (newProject) {
      vm.errorMessage = null;
        vm.projects.unshift(savedProject);
    }, function () {
      console.info('Modal dismissed at: ' + new Date());
    });
  }

这行得通,但我还有五个模态框,我试图找到这七个适合一个功能而不是七个不同功能的东西。 我还尝试将所有这些都放在一次 Controller 中,而不是它们所属的 Controller 中。这工作了一会儿,但后来它没有显示一些应该在页面上的按钮。

最佳答案

好吧,您可以通过使用服务 来抽象您的代码并将您的参数解析为。此服务将处理 uibModal 实例。这样您就可以避免重复的代码。

AngularJS 示例应用程序和服务:

var myApp = angular.module('myApp', []);

//simple controller
myApp.controller('MyCtrl', function (myModalService) {

  //open modal
  myModalService.openModal('views/modals/add.project.html', 'addProjectController');

  //close on click
  $scope.close = function () {
      myModalService.modalInstance.close();
  }
});

// my simple modal service
myApp.service('myModalService', function() {

  this.modalInstance = null;

  this.openModal = function (templateUrl, controller) {

    this.modalInstance = $uibModal.open({
      animation: true,
      templateUrl: templateUrl,
      controller: controller,
      controllerAs: 'vm',
      backdrop: 'static',
      resolve: {
        formData: function() {
          return vm.formData;
        }
      }
    });

    return this.modalInstance;
  }

  return this;
});

关于javascript - AngularJS $uibModal 作为具有不同 Controller 的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46339954/

相关文章:

javascript - ng-repeat 在数组子集上完成后动态触发事件

javascript - 悬停第一个 DIV 会影响所有其他第一个 DIVS

Javascript 将字符串转换为数字

javascript - D3 - 平滑的径向图表过渡动画

javascript - Cakephp、JsHelper 在 "update"上调用 JavaScript 函数?

javascript - Jasmine - 模拟 spy On.and.callFake http成功错误

css - 什么是 span-element 的替代品?

html - 元素在移动设备上的其他元素下滑动

java - 使用 google sitebricks @embed 在所有 html 页面中嵌入页眉和页脚

javascript - typescript :如何在自定义过滤器中使用 Angular $filter