ng-include在mdDialog中不起作用

时间:2016-08-19 23:28:30

标签: angularjs angularjs-ng-include mddialog

我正在尝试使用单个模态对话框功能来容纳多个模板。我发送调用以创建一个输入对话框,我试图根据该输入调用各种ng-include文件。但是,似乎永远不会调用ng-include文件。

我有什么遗失的吗?

对话呼叫

function showDialog(ev, thisItem, modalType) 
    {
        $mdDialog.show({
            controller: 'DialogController',
            controllerAs: 'vm',
            templateUrl: 'app/main/apps/views/templates.html',
            locals:{
                modalType : modalType
                thisItem : thisItem
            },
            parent: angular.element(document.body),
            targetEvent: ev,
            clickOutsideToClose:true,
            fullscreen: true
        })
        .then(function(data) {
            vm.selectedRef=data;
            // Call to server to update the references
        }, function() {

        });
    };

应该调用各种较低模板的模板

<md-dialog aria-label="" id="marginDialog" class="dialogItem" ng-cloak>

<span ng-if="vm.modalType=='bibEdit'"
      ng-include="app/main/apps/views/editReference.tmpl.html">

</span>

<span ng-include="app/main/apps/templates/editMargins.tmpl.html">

</span>

我可以确认变量到达模板并且是正确的,并且它们在控制器中是正确的。但是,简单地不调用包含文件。

2 个答案:

答案 0 :(得分:0)

我确实混合了包含角度材料成分的混合结果,所以我现在试着避免它。

在这种情况下我会尝试做的是编写一个函数来确定正确的模板URL,然后将其作为对话框配置对象传递:

function showDialog(ev, thisItem, modalType) 
{
    var template;
    var getTemplate = function(){
      switch(modalType){
        case 'one':
          template = 'dialog1.html';
          break;
        case 'two':
          template = 'dialog2.html';
          break;
      }      
    }();

    $mdDialog.show({
        controller: 'DialogController',
        controllerAs: 'vm',
        templateUrl: template,
        locals:{
            modalType : modalType
            thisItem : thisItem
        },
        parent: angular.element(document.body),
        targetEvent: ev,
        clickOutsideToClose:true,
        fullscreen: true
    })
    .then(function(data) {
        vm.selectedRef=data;
        // Call to server to update the references
    }, function() {

    });
};

这是一个有效的codepen

答案 1 :(得分:0)

使用指令。这适用于md对话框。

(function() {

    // Add the directive to the module
    angular.module("YourApp").directive('editMargins', EditMarginsFactory);

    // Factory Method
    function EditMarginsFactory()
    {
        // Construct and return the instance
        return {
            restrict: 'E',
            scope: false,
            templateUrl: "app/main/apps/templates/editMargins.tmpl.html"
        };
    }

})();

然后,不要在其他模板中使用ng-include,而是执行此操作:

<edit-margins></edit-margins>

请注意,在指令中使用 scope:false 会导致它使用父作用域,即您添加指令的模板使用的作用域。