// The Package is past automatically as first parameter
module.exports = function(MyPackage, app, auth, database) {
// example route
app.get('/myPackage/example/anyone', function (req,res,next) {
res.send('Anyone can access this');
});
};
11、Angular路由
Angular也有路由,它的路由通常在public/routes/myPackage.js中。最新版本的MEAN使用的是$stateProvider。
$stateProvider
.state('myPackage example page', {
url: '/myPackage/example',
templateUrl: 'myPackage/views/index.html'
});
当以包名称作为开头的话,Angular的视图就可以通过templateUrl来公开了。
12、菜单系统
包可以勾住现有的菜单系统然后添加链接到MEAN集成的菜单中去。每一个链接都有指定title、template、menu、role。如果指定的menu并不存在,那么一个新的menu将会被创建出来。通过menu angular service查询链接的信息,可以让menu对象变在客户端中变得可以访问。
下面是介绍如何在app.js中为菜单添加链接的。
//We are adding a link to the main menu for all authenticated users
MyPackage.menus.add({
title: "myPackage example page",
link: "myPackage example page",
roles: ["authenticated"],
menu: "main"
});
可以通过查看public/system/controllers/header.js目录来了解菜单服务如何实现的。
13、Html视图渲染
包可以通过内置的渲染函数进行html的渲染。默认的渲染函数是swig。视图存在于包中的server/views文件夹中,并且以.html作为结尾。
下面是一个简单渲染html的例子。
app.get('/myPackage/example/render', function (req,res,next) {
MyPackage.render('index', {packageName:'myPackage'}, function (err, html) {
//Rendering a view from the Package server/views
res.send(html);
});
});
通过自定义的包,可以覆盖默认的布局。
下面是一个覆盖默认系统布局而不是使用在包内的本地布局的例子:
MyPackage.register(function(system, app) {
app.set('views', __dirname + '/server/views');
// ...
不过注意,package必须依赖System包来保证它在System包后面被求值,这样可以覆盖视图文件夹。
15、覆盖视图
你可以覆盖core包使用的默认的public视图。创建一个主页,你必须创建一个包,并且修改在public文件夹的脚本,就像这样:
angular.module('mean.mycustompackage', ['mean.system'])
.config(['$viewPathProvider', function($viewPathProvider) {
$viewPathProvider.override('system/views/index.html', 'mycustompackage/views/myhomepage.html');
}]);
这样会将mycustompackage/views/myhomepage.html渲染成为主页。
16、创建自己的包
$ mean package
它将会将包创建在/packages/custom/packageName下。
17、删除包
$ mean uninstall myPackage
18、贡献自己的包
如果你的包已经定型并且不会出什么问题了,那么你可以将你的包上传到包代码库中。方法是:
$ mean register # register to the mean network (see below) $ cd$ mean publish