Skip to content
This repository was archived by the owner on Dec 1, 2023. It is now read-only.

Commit 278484e

Browse files
author
Steffan
committed
fix Vue 2.x compatibility #1
1 parent 354c154 commit 278484e

File tree

5 files changed

+343
-240
lines changed

5 files changed

+343
-240
lines changed

build/build.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ rollup.rollup({
2222
}).code, bundle);
2323
})
2424
.then(function (bundle) {
25+
var code = fs.readFileSync('dist/vue-event-manager.js', 'utf8');
2526
return write('dist/vue-event-manager.min.js',
26-
banner + '\n' + uglify.minify('dist/vue-event-manager.js').code,
27+
banner + '\n' + uglify.minify(code).code,
2728
bundle);
2829
})
2930
.then(function (bundle) {

examples/index.html

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<title>Event Manager</title>
6+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
7+
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
8+
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
9+
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.js"></script>
10+
<script src="../dist/vue-event-manager.js"></script>
11+
</head>
12+
<body>
13+
14+
<div id="app" class="container">
15+
16+
<h1>Event Manager</h1>
17+
18+
<pre>{{ eventLog | json }}</pre>
19+
20+
<button class="btn btn-primary" type="button" @click="triggerTest">Trigger 'test' event</button>
21+
22+
</div>
23+
24+
<script>
25+
26+
new Vue({
27+
28+
el: '#app',
29+
30+
data: function() {
31+
return {
32+
eventLog: []
33+
}
34+
},
35+
36+
created: function() {
37+
this.pushLog('created hook executed');
38+
},
39+
40+
events: {
41+
42+
test: function() {
43+
this.pushLog('\'test\' event executed');
44+
}
45+
46+
},
47+
48+
filters: {
49+
50+
json: function (val) {
51+
return JSON.stringify(val, null, 2);
52+
}
53+
54+
},
55+
56+
methods: {
57+
58+
pushLog: function(msg) {
59+
this.eventLog.push((new Date).getTime() + ': ' + msg);
60+
},
61+
62+
triggerTest: function() {
63+
this.$trigger('test');
64+
}
65+
66+
}
67+
68+
});
69+
70+
</script>
71+
72+
</body>
73+
</html>

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
"devDependencies": {
2828
"buble": "^0.15.2",
2929
"buble-loader": "^0.4.1",
30-
"jest": "^19.0.2",
30+
"jest": "^20.0.4",
3131
"replace-in-file": "^2.5.0",
32-
"rollup": "^0.41.6",
32+
"rollup": "^0.43.0",
3333
"rollup-plugin-buble": "^0.15.0",
34-
"uglify-js": "^2.8.22",
35-
"vue": "^2.2.6"
34+
"uglify-js": "^3.0.18",
35+
"vue": "^2.3.4"
3636
}
3737
}

src/index.js

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,38 +12,35 @@ function plugin(Vue) {
1212
}
1313

1414
var Events = new EventManager();
15+
var version = Number(Vue.version.split('.')[0]);
1516

16-
Vue.mixin({
17+
function initEvents() {
1718

18-
init() {
19+
var {events} = this.$options, _events = [];
1920

20-
var { events } = this.$options, _events = [];
21+
if (events) {
2122

22-
if (events) {
23+
forEach(events, (listeners, event) => {
24+
forEach(isArray(listeners) ? listeners : [listeners], listener => {
2325

24-
forEach(events, (listeners, event) => {
25-
forEach(isArray(listeners) ? listeners : [listeners], listener => {
26+
var priority = 0;
2627

27-
var priority = 0;
28+
if (isObject(listener)) {
29+
priority = listener.priority;
30+
listener = listener.handler;
31+
}
2832

29-
if (isObject(listener)) {
30-
priority = listener.priority;
31-
listener = listener.handler;
32-
}
33-
34-
_events.push(Events.on(event, listener.bind(this), priority));
35-
});
33+
_events.push(Events.on(event, listener.bind(this), priority));
3634
});
35+
});
3736

38-
this.$on('hook:beforeDestroy', () => _events.forEach(off => off()));
39-
}
40-
37+
this.$on('hook:beforeDestroy', () => _events.forEach(off => off()));
4138
}
42-
43-
});
39+
}
4440

4541
Vue.prototype.$events = Events;
4642
Vue.prototype.$trigger = Events.trigger.bind(Events);
43+
Vue.mixin(version < 2 ? {init: initEvents} : {beforeCreate: initEvents});
4744
}
4845

4946
if (typeof window !== 'undefined' && window.Vue) {

0 commit comments

Comments
 (0)