2016-07-31 98 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>