Skip to content

Commit

Permalink
feat:add renderClient method
Browse files Browse the repository at this point in the history
  • Loading branch information
hubcarl committed Jul 31, 2017
1 parent 586de00 commit 691ecfe
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 10 deletions.
25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,31 @@ exports.vuessr = {
};
```

## Render

### Server Render, call `render` method

```js
// controller/home.js
exports.index = function* (ctx) {
yield ctx.render('index/index.js', Model.getPage(1, 10));
};

```

### Client Render, Call `renderClient` or build static html to `egg-static` dir by Webpack.

when client render , the template is `exports.vuessr.layout`

```js
// controller/home.js
exports.client = function* (ctx) {
yield ctx.renderClient('index/index.js', Model.getPage(1, 10));
};

```


see [config/config.default.js](config/config.default.js) for more detail.

## Questions & Suggestions
Expand Down
26 changes: 18 additions & 8 deletions app/extend/context.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,23 @@ module.exports = {
const template = options.renderOptions && options.renderOptions.template || this.app.vue.resource.template;
const context = { state: locals };
const filepath = path.join(this.app.config.view.root[0], name);
const html = yield this.app.vue.renderBundle(filepath, context, options).catch(err => {
if (config.fallbackToClient) {
this.app.logger.error('[%s] server render bundle error, try client render, the server render error', name, err);
return this.renderString(template, context.state);
}
throw err;
});
this.body = this.app.vue.resource.inject(name, html, context, config, options);
let html = '';
if (options.renderClient) {
html = yield this.renderString(template, context.state);
} else {
html = yield this.app.vue.renderBundle(filepath, context, options).catch(err => {
if (config.fallbackToClient) {
this.app.logger.error('[%s] server render bundle error, try client render, the server render error', name, err);
return this.renderString(template, context.state);
}
throw err;
});
}
this.body = this.app.vue.resource.inject(html, context, name, config, options);
},

* renderClient(name, locals, options = {}) {
options.renderClient = true;
yield this.render(name, locals, options);
},
};
2 changes: 1 addition & 1 deletion lib/resource.js
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ class Resource {
}


inject(name, html, context, config, options) {
inject(html, context, name, config, options) {
const fileKey = name;
const fileManifest = this.resourceDeps[fileKey];
if (fileManifest) {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "egg-view-vue-ssr",
"version": "2.0.5",
"version": "2.1.0",
"description": "vue server side render solution for egg-view-vue",
"eggPlugin": {
"name": "vuessr",
Expand Down

0 comments on commit 691ecfe

Please sign in to comment.