2015-07-21 108 views
0

是否可以注入(或可能是合併會更好一點)從ngRoute模板到指令模板中?將模板從ngRoute導入指令AngularJS

讓我們例子說明:

沒有與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> 

可能嗎?

或者可能 - 如何將Controller中的值傳遞到沒有ng-view的指令中?

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

UPDATE:

我有幾個頁面,。恩。在page1我會用我的<menu-template template-name="main"></menu-template>

page2page3page4 - 這些網頁裏面,我會用我的<menu-template template-name="searcher"></menu-template>

回答

0

如果您的路由僅由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 
    } 
} 
+0

的事情是 - ,在「搜索」模板會有幾個子頁面,並且每個子頁將有一個獨特的模板,我想dipslay –

+0

@karolinka,我不完全確定你的意思是「subpage」在這裏...編輯你的問題與你想要實現的例子。你的問題被定義爲「如何做X」,但它的基礎可能是實現「Y」的願望 - 讓我們關注「Y」(參見[XY問題](http://meta.stackexchange.com/questions/) 66377 /這是什麼xy問題)) –

+0

我做了一個更新,也許現在它會更乾淨。查看整個代碼,因爲我在幾乎所有的「代碼」部分中糾正了 –