2015-03-25 52 views
1

我有以下指令:AngularJS指令動態模型結合,以查看

app.directive('renderPartial', function($compile) { 
    return { 
     restrict: "AE", 
     link: function(scope, element, attrs) { 
     var path = getPartial(attrs.module, attrs.file); 
     //path = /abc/some_file.html 
     scope[attrs.model] = path; 
     var el = $compile('<div ng-include="attrs.model"></div>')(scope); 
     element.html(el); 
     } 
    } 
}); 

筆者認爲:

<render-partial module="abc" file="some_file" model="some_model"></render-partial> 

現在,由於某種原因,這是行不通的,沒有錯誤。但文件沒有得到渲染。

Plunkr我的問題:http://plnkr.co/edit/CkTE2pV4i5LvL60NEYfE

+0

平檢查我的更新答案:-P – squiroid 2015-03-25 10:42:35

回答

1

UPDATE

根據附着在評論plunker: -

你需要做兩件事情

1)使用var el = $compile('<div ng-include="'+attrs.model+'"></div>')(scope);

2)element.append(el); in平面HTML代替:-P

Plunker

+0

不,我想這工作:'var el = $ compile('

')(scope);' – 2015-03-25 09:54:37

+0

我的意思是把attrs.model的值放在你的ng-include裏面不包括scop因爲它是一個膠水b/w視圖,所以,假設attr.model ha s'one'那麼範圍[attrs.model]將轉向範圍[one],它等於scope.one,並且它將僅僅是'one'。你不需要在它前面的範圍字。 – squiroid 2015-03-25 10:00:35

+0

如果我嘗試這個'var el = $ compile('

')(scope);'仍然不能正常工作 – 2015-03-25 10:07:02

0

你可以把它的動態,像這樣:

myApp.directive('renderPartial', function($compile) { 
    return { 
     restrict: "AE", 
     link: function(scope, element, attrs) { 
     var path = 'test.html'; 
     scope.path = path; 
     var el = $compile('<div ng-include="path"></div>')(scope); 
     element.append(el); 
     } 
    } 
}); 

Fiddle

+0

如果我有多個相同的指令以不同的文件稱這將無法正常工作,導致範圍不數組 – 2015-03-25 10:07:51

+0

的http:// plnkr.co/edit/CkTE2pV4i5LvL60NEYfE – 2015-03-25 10:21:34