2016-07-31 100 views
0

我想寫一個簡單的CMS系統,其中每個頁面的內容存儲在數據庫中。當用戶試圖訪問角度動態生成HTML文件

/pages/abc.html

通過角路由和控制器來檢索頁面從數據庫中的內容併產生abc.html的飛行。我發現一個方法是將功能添加到templateUrl返回頁面:

.when('/content/pages/:name*', { 
    templateUrl: function(parameters) { 
     return '/pages/' + parameters.name + '.html'; 
    }, 
    controller: 'ContentCtrl', 
    controllerAs: 'content' 
    }) 

然而,問題是,我需要有abc.html已經存在,然後在控制器編譯DOM含量和附加。我試圖做的不是讓abc.html已經存在,而是隨時產生。這樣我可以允許我的用戶添加xyz內容,當他們嘗試訪問xyz.html時,它將會在那裏,而不必先創建xyz.html模板html。有什麼方法可以用來實現這個嗎?

回答

0

是否有任何理由需要生成parameters.name html文件?我認爲你可以定義模板,然後將html傳遞給控制器​​。如果有很多重複的邏輯,你可以製作一個內容組件或指令。

0

我所做的是編寫一個自定義指令。我將指令傳遞給一個包含對應於UI元素的對象的數組。這些對象是在JS中定義的,並且都有一個我編寫的.html()函數,它根據對象屬性生成一些html。然後存儲/恢復結構,你可以只是JSON.stringify對象,將其插入到數據庫和JSON.parse中以獲取對象...只有棘手的部分是你需要將數據類型存儲爲對象的屬性所以你可以選擇正確的類型。

指令本身只是調用每個對象的html()函數,並連接輸出,然後設置元素的innerHTML。

0

我意識到我可以使用模板屬性來插入任何我想要的html。

.when('/content/pages/:name*', { 
    template: function(parameters) { 
     return 'hello' + parameters.name; 
    }, 
    controller: 'ContentCtrl', 
    controllerAs: 'content' 
    }) 
0

,你能做些什麼,它通過模板名稱作爲參數傳遞給控制器​​:

.when('/content/pages/:name*', { 
    templateUrl: function(parameters) { 
     return '/pages/:templateName'; 
    }, 
    controller: 'ContentCtrl', 
    controllerAs: 'content' 
    }) 

而且在控制器上創建所需的HTML(如果不存在),然後在模板中包括HTML使用ng-include

<div ng-include="template.url" ng-if="template.url"></div>