1

我可以在两个模板 URL 之间选择一个吗?就像是 :

angular.factory('SAMPLE',function(){
    return {
        getnDetails:function($http){            
            return $http({
                method: 'GET',
                url: url
            });
    }
)};

angular.directive() {    
     controller : function($scope) {

     SAMPLE. getnDetails().sucess(){

     }.error() {

        templateURL: "zbx.html"
     }   

 templateUrl : "xyz.html"
 }

这样当我的 http 请求出错时,加载完全不同的模板。什么是最好的方法来做这样的事情。

4

2 回答 2

0

ng-include可能是你这里的朋友。部分(希望语法正确)示例:

angular('app').directive('coolDirective', function () {
  return {
    scope: {},
    controller: function ($scope) {
      $scope.template = 'b.html';

      if ($scope.condition) {
        $scope.template = 'a.html';
      }
    },
    template: '<div ng-include="template"></div>'
  }
});
于 2014-09-19T17:50:25.953 回答
0

这是我选择不同模板的方法。关键是 templateUrl 可以是一个接受元素和属性的函数。

在我的 HTML

<my-directive template="test-template.html"></my-directive>

在我的指令中

.directive('myDirective', function () {

    var path = '/app/templates/';

    return {
        restrict: 'E',
        templateUrl: function(tElement, tAttrs) {
            return path + tAttrs.template + '.html';
        },
        controller: function ($scope) {

                  // whatever...
        }

    };
})

我喜欢这种方法,因为它允许我对所有逻辑都有一个通用指令,但可以从我的 HTML 控制用于显示结果的模板格式。

根据 Angular Directive 页面。

注意:您目前无法从 templateUrl 函数访问范围变量,因为在初始化范围之前请求模板。

也就是说,如果出现错误,您正在努力的解决方案是打开一个完全不同的模板。在这种情况下,您希望使用$location重定向到错误页面,而不是简单地加载不同的模板。或者可能在您的主模板中有一个错误处理指令,它会在任何页面上打开一个错误模式。

希望这些信息对您或其他人有所帮助。

于 2015-10-14T19:25:57.267 回答