Comments (10)
Yeah, this could be pretty handy.
from discussion.
Cool! I'll do a PR when I have some time.
from discussion.
Fiddle here with the implemented code: http://jsfiddle.net/ayamflow/RT7kG/ - waiting to push the PR, it just bothers me that doing Vue.log(vm)
will throw an error because of the circular reference.
I'm not sure if I should test each arguments and ignore the ones with circular reference, or just keep it as it is, since it's the expected behavior from JSON.parse.
from discussion.
Bumping this - could @yyx990803 or a more experienced developer than me give me a hint ?
If my implementation is bad or brings weird checks to the codebase, I can make it a plugin instead.
from discussion.
The circular reference comes from vm.$compiler.vm
. It might be easier to do a shallow clone and in the process filter out all keys that start with $
.
from discussion.
I didn't expect this helper to give me such trouble ahah ! I had some free time tonight so I gave it a go.
I ended up with this, what do you think ? Instead of cloning, I tested if each property passed to the Vue.log method was a vm or a $compiler.
/**
* Clean log without getter/setter
* usefull for in-application debugging.
* Only log $data & its properties
*/
cleanLog: function() {
if(!console) return
var args = [].slice.call(arguments)
for(var i = args.length - 1; i >= 0; i--) {
var arg = args[i]
if(!utils.isTrueObject(arg)) continue
var hasCircularRef = false,
isVm = !!arg.$compiler
// If arg is a vm, log $data directly
if(isVm) {
args.splice(i, 1, arg.$data)
continue
}
// don't log if $ or $compiler
for(var prop in arg) {
// $compiler
if(prop === 'vm') hasCircularRef = true
// $ / v-ref
if(utils.isTrueObject(arg[prop]) && '$compiler' in arg[prop]) hasCircularRef = true
}
if(hasCircularRef) {
args.splice(i, 1)
continue
}
}
return console.log.apply(console, JSON.parse(JSON.stringify(args)))
}
Basically, it will ignore any properties not coming from the $data
hash.
It's a bit long for its purpose, but I think all the use cases are covered. I need to add some unit tests to be sure though.
Edit: Check this fiddle to see it working.
from discussion.
Pretty cool! It has grown more complex than I thought too, but maybe this could fit well as a debugging plugin? That way we don't have to include code that won't be used in production and have the flexibility to add more debugging functionalities in the future.
from discussion.
Yep that's what I was thinking !
Thank your for your guidance, much appreciated. I'll make it a plugin when I have some time :)
from discussion.
Here it comes: vue-debug.
Only adding the Vue.log
method for now. Hoping people will contribute and add amazing methods !
(I'll tinker with the test runner later this week)
from discussion.
👍
from discussion.
Related Issues (20)
- Use ||(or) in v-if (with nuxt js)
- Instantiate a copy of a component directly in that component HOT 1
- Call pre-defined javascript method on vue js event
- What about js-data.io?
- How to make vue bind to, or work with, html in properties
- Convert VueJS 1 to VueJS 2 HOT 2
- Third Party Libraries - Make non reactive?
- why v-switch not included in vuejs and what the alternative way HOT 1
- Use raw html inside v-bind
- iOS event bound using addEventListener is not triggering
- How to validate when blur a component.
- Google is not defined HOT 2
- vuejs can not find method or variable inside a callback function HOT 2
- Thousands of rows performance HOT 1
- how to pass Header + Body in POST api using Vue JS-axios HOT 4
- Conditional rendering and child component
- Fetch the value of element dynamically
- Vue breaks DataTables and Pace JS
- Bootstrap4 tag b-form-input has problem with @blur
- Invalid prop: Expected `Basic type`, got Nulll.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from discussion.