【问题标题】:Inject template from ngRoute into Directive AngularJS将模板从 ngRoute 注入指令 AngularJS
【发布时间】:2015-07-21 08:09:11
【问题描述】:

是否可以将来自 ngRoute 的模板注入(或者也许 merge 会更好)指令中的模板?

我们举例说明:

有一个带有 ngRoute 的配置

angular.module('dynamic-menu').config(['$routeProvider', function ($routeProvider) {
    $routeProvider.when('#', {
        controller: 'MainController',
        template: '<p>Main Page</p>'
    });
    $routeProvider.when('#/productReturn/', {
        controller: 'ProductReturnController',
        template: '<p>Product Return Page</p>'
    });
    $routeProvider.when('#/demand/', {
        controller: 'DemandController',
        template: '<p>Demand Page</p>'
    });
}]);

我不知道我们需要一个控制器来做某事吗?

还有指令:

angular.module('dynamic-menu').directive('menuTemplate', ['$compile', function ($compile) {
    return {
        restrict: 'E',
        link: function (scope, element, attrs) {
            var template = {
                'searcher': "<nav class=\"navbar navbar-inverse navbar-fixed-top\" role=\"navigation\" id=\"nav-bar\">"
                          + "<div class=\"container-fluid\">"
                              + "<div class=\"navbar-header\">"
                                  + "<span class=\"navbar-brand\" > INSERT TEMPLATE HERE </span>"
                              + "</div>"
                          + "</div> <!-- /.container-fluid -->"
                       + "</nav>",
                'main' : (...) <- not important
            }; //var template END

            var templateObj;
            if (attrs.templateName) {
                templateObj = $compile(template[attrs.templateName])(scope);
            }
            else {
                templateObj = $compile(template['main'])(scope);
            }
            element.append(templateObj);
        }
    };
}]);

这是指令中我要粘贴模板的行:

"<span class=\"navbar-brand\" > INSERT TEMPLATE HERE (for. ex. <p>Product Return Page</p>) </span>"

在 HTML 中

<menu-template template-name="searcher"></menu-template>

有可能吗?

或者也许 - 如何在没有 ng-view 的情况下将 Controller 中的值传递到指令中?

angular.module('dynamic-menu').controller('ProductReturnController', ['$scope', function ($scope) {
    $scope.header = "PROOODDUUUCCCTTT REEETUUURRRNNN TTTITTTTLEEEEE";
}]);

更新:

我有几页。前任。在page1 我会用我的&lt;menu-template template-name="main"&gt;&lt;/menu-template&gt;

page2 page3 page4 - 在这些页面中,我将使用我的&lt;menu-template template-name="searcher"&gt;&lt;/menu-template&gt;

【问题讨论】:

    标签: javascript angularjs directive ngroute route-provider


    【解决方案1】:

    如果你的路由只包含 menuTemplate 指令(看起来是这样),那么只需在模板中包含该指令:

    template: '<menu-template template-name="search">SOME TEMPLATE FOR SEARCH</menu-template>'
    

    然后使指令嵌入其内容。而且,不需要手动$compile(虽然你可以)——你可以在指令模板中定义它:

    var template = {
      search: "<nav class='navbar'>\
                 etc...\
                 <div ng-transclude></div>\
               </nav>",
    
      main: "..."
    };
    
    return {
      template: function(element, attrs){
        return template[attrs.templateName]; 
      },
      transclude: true,
      link: function(scope, element){
        // whatever else (other than the template) you might need here
      }
    }
    

    【讨论】:

    • 问题是 - 在“搜索器”模板中会有几个子页面,每个子页面都有一个独特的模板,我想将其删除
    • @karolinka,我不完全确定您在这里所说的“子页面”是什么意思...用您想要实现的示例编辑您的问题。您的问题被框定为“如何做 X”,但其背后可能是实现“Y”的愿望 - 让我们专注于“Y”(参见 XY questions
    • 我做了一个更新,也许现在它会更干净。查看整个代码,因为我在几乎所有 code 部分都进行了更正
    • @karolinka,什么是“页面”?是路线吗?如果是这样,您能否相应地指定template-name="searcher"
    • 是的,页面是一个路由。 template-name="searcher" 在指令内,你能告诉我我需要告诉你什么吗?对不起,我迷路了:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多