首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Angular uibModal,Resolve,未知提供程序

Angular uibModal,Resolve,未知提供程序
EN

Stack Overflow用户
提问于 2016-02-12 05:32:22
回答 1查看 52.3K关注 0票数 22

我正试图通过一个服务公开一个“通用”的模式--使用Angular的$uibModal。下面是该服务的定义:

代码语言:javascript
复制
angular.module('app').service('CustomModalService', ['$uibModal', function ($uibModal) {

    var openCustomModal = function (size, title, message) {
        var actionToPerformOnConfirm = action;

        var modalInstance = $uibModal.open({
            templateUrl : 'templates/CustomModal.html',
            size: size,
            resolve: {
                title: title,
                message: message
            }
        });
    };

    return {
        openCustomModal: openCustomModal
    };
}]);

上面没有太复杂的东西。然而,它并不起作用。如果我从对象中删除resolve属性,服务将正常工作;但是,如果我包含resolve属性,则会收到源自该属性的Unknown Provider错误。

resolve属性的文档如下所示:

(类型:对象)-将被解析并作为本地变量传递给控制器的成员;它等效于路由器中的resolve属性。

目标是能够为在其DOM中利用这些属性的模型提供模板,例如:

代码语言:javascript
复制
<div ng-controller="CustomModalController">
    <div class="modal-header">
        <h3 class="modal-title">{{title}}</h3>
    </div>
    <div class="modal-body">
        {{message}}
    </div>
    <div class="modal-footer">
        <button class="ad-button ad-blue" type="button" ng-click="confirmAction()"></button>
        <button class="ad-button ad-blue" type="button" ng-click="cancelAction()"></button>
    </div>
</div>

我遗漏了什么导致这个错误被抛出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-12 08:09:09

您有两个问题:

  1. 您需要在您的模式配置中定义控制器
  2. 您的解析对象需要是stringfunction的映射,其中string是将被注入到您的模式的控制器中的依赖项的名称,而function是一个工厂函数,它将在控制器实例化时用于提供该依赖项。

工作示例:JSFiddle

JavaScript

代码语言:javascript
复制
angular.module('myApp', ['ui.bootstrap'])
  .controller('MyModalController', MyModalController)
  .directive('modalTrigger', modalTriggerDirective)
  .factory('$myModal', myModalFactory)
;

function MyModalController($uibModalInstance, items) {
  var vm = this;
  vm.content = items;
  vm.confirm = $uibModalInstance.close;
  vm.cancel = $uibModalInstance.dismiss;
};

function modalTriggerDirective($myModal) {
  function postLink(scope, iElement, iAttrs) {
    function onClick() {
      var size = scope.$eval(iAttrs.size) || 'lg'; // default to large size
      var title = scope.$eval(iAttrs.title) || 'Default Title';
      var message = scope.$eval(iAttrs.message) || 'Default Message';
      $myModal.open(size, title, message);
    }
    iElement.on('click', onClick);
    scope.$on('$destroy', function() {
      iElement.off('click', onClick);
    });
  }

  return {
    link: postLink
  };
}

function myModalFactory($uibModal) {
  var open = function (size, title, message) {
    return $uibModal.open({
      controller: 'MyModalController',
      controllerAs: 'vm',
      templateUrl : 'templates/CustomModal.html',
      size: size,
      resolve: {
        items: function() {
          return {
            title: title,
            message: message
          };
        }
      }
    });
  };

  return {
    open: open
  };
}

HTML

代码语言:javascript
复制
<script type="text/ng-template" id="templates/CustomModal.html">
  <div class="modal-header">
    <h3 class="modal-title">{{vm.content.title}}</h3>
  </div>
  <div class="modal-body">
    {{vm.content.message}}
  </div>
  <div class="modal-footer">
    <button class="ad-button ad-blue" type="button" ng-click="vm.confirm()">
      confirm
    </button>
    <button class="ad-button ad-blue" type="button" ng-click="vm.cancel()">
      cancel
    </button>
  </div>
</script>

<button modal-trigger size="'sm'" title="'Hello World!'" message="'This is a test'">
  Click Me
</button>
票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35350463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档