angularjs - 指令内不能 $uibModal 但可以在 Controller 中访问

标签 angularjs angularjs-directive bootstrap-modal

我想指示打开一个模式。但是 $uibModal 没有在指令中定义。

var app=angular.module("app",['ui.bootstrap']);

app.controller('AppCtrl', function ($scope, $uibModal) {
    console.log("$uibModal controller",$uibModal);//getting object
});

app.directive('showPopUp',function() {
    return {
        restrict: 'EA',
        link: function(scope, el, attrs,$uibModal) {
            console.log("$uibModal",$uibModal);//undefined here
                var modalInstance = $uibModal.open({
                  animation: $scope.animationsEnabled,
                  templateUrl: 'popup.html',
                });

                modalInstance.result.then(function (selectedItem) {
                  scope.selected = selectedItem;
                }, function () {
                });

        }  
    }
});

如何在我的指令中使用 $uibModal 打开 modal ?

最佳答案

指令链接函数是不可注入(inject)的,它以固定的顺序采用固定的参数集。但是您可以将服务注入(inject)指令函数本身:

app.directive('showPopUp', function($uibModal) {
    return {
        restrict: 'EA',
        link: function(scope, el, attrs) {

            var modalInstance = $uibModal.open({
                animation: scope.animationsEnabled,
                templateUrl: 'popup.html',
            });

            modalInstance.result.then(function(selectedItem) {
                scope.selected = selectedItem;
            }, function() {});

        }
    }
});

演示: http://plnkr.co/edit/jwNOM94DtyRIXTdhvJmy?p=preview

关于angularjs - 指令内不能 $uibModal 但可以在 Controller 中访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37606906/

相关文章:

angularjs - 如何为 keydown 绑定(bind)指令编写单元测试?

javascript - AngularJS 从 Controller 打开模态

javascript - Bootstrap 模式不显示

php - 如何在模态中传递当前行值?

asp.net-mvc - IE9 从 URL 中删除 # 部分(适用于 Firefox!)

javascript - 基于 IS AngularJS 过滤结果

angularjs - 跳过对某些特定元素的脏检查到 ng-form

javascript - 根据 AngularJS 中的父指令,子指令中的“require”

javascript - 将参数传递给没有 Controller 的指令

javascript - 更改 $scope 属性并观察变化