2015-04-07 62 views
0

說我有一個指令「foo」的編譯模板:

app.directive("foo", function($compile) { 
    var innerTemplate = $compile('<div class="foo"></div>'); 
    return { 
     restrict: "E"; 
    }; 
})); 

爲什麼認爲$編譯調用將失敗,抱怨fooDirective依賴於fooDirective,即使該指令被聲明爲僅限於「E」?

編輯:新增例如小提琴:https://jsfiddle.net/n4bvkbp7/1/

回答

1

該指令「富」必須完全定義,然後才能對其進行編譯。嘗試把你的編譯語句進行指令鏈接功能:

app.directive("foo", function($compile) { 
    return { 
     restrict: "E", 
     link: function() { 
       var linkFn = $compile('<div class="foo"></div>'); 
     } 
    }; 
})); 
+0

它的工作原理給出語法'函數(){}'修正 –

+0

我假設你的意思'鏈接:函數(){//}' 。我試過了,它仍然會拋出同樣的錯誤。 – markwongsk

0

我不明白爲什麼你需要一個$編譯服務在這裏:

ngModule.directive('foo', ['$compile', function($compile) { 
     return { 
      restrict: 'E', 
      template: '<div class="foo">foo</div>', 
      link: function(scope, element, attrs){ 

       //TODO: 
      } 

     } 

}]); 
+0

同意,它應該需要手動調用'$ compile',沒有什麼特別的模板。應該能夠刪除作爲依賴也 – charlietfl

+0

我知道我可以使用'模板',如果我只想連接模板一次。但是,假設(爲了假設的原因,如果僅僅是爲了存在這種用例)我想將我的模板與兩個不同的作用域鏈接起來,第二個作用域可能基於傳入的作用域,例如: 'link :function(scope,element,attrs){element_append(template(scope)); } template.append(template(scope。$ new()); //可能是當前範圍的克隆範圍改變了一定的值 } – markwongsk

+0

@markwongsk這並沒有太大的意義,如果這就是你所需要的,那麼就是隔離範圍 – charlietfl

0

您使用return語句之外$compile功能,即意味着它將在編譯時執行,你只能編譯你的元素postLink函數。

指令

var app = angular.module("app", []); 
app.directive("foo", function($compile) { 

    return { 
     restrict: "E", 
     link: function(scope, element, attrs){ 
      var innerTemplate = $compile('<div class="foo">HELLO WORLD</div>'); 
      element.append(innerTemplate(scope)); 
      //do other logic here 
     } 
    }; 
}); 

JsFiddle

相關問題