Location: Asia Pacific, Cyberspace, in the Dark Dystopia
Posts: 19,118
Thanks Given: 2,351
Thanked 3,359 Times in 1,878 Posts
Yes, in your example you still need to call a function to update so it does not accomplish what we have set out to do, which is to insure that when vbuserId updates outside of vue, it updates in vue.
If I take your code and in the dev console type:
The avatar does not change because your codes does not call the function nor update it.
However, if we do only this:
It updates when we change vbuserId in the dev console.
This is the intended result in the browser, to react to changes to an external var change.
The trick, which we have not figured out yet, it do bind vue (vm in this instance) to vbuserId and react to a change outside of the vm instance. The setInterval() code above does that, but I want do do this without setInterval() using a native vue binding.
I just watched a YT video, and in that video, they also used setInterval() to update vue based on an JS var change. So, I'm still searching YT, Google and the entire world, LOL, for Vue method which binds to an external var and reacts when a change is made in the dev console.
See attached video to see this change in the browser by changing vbuserId in the console.
Location: Asia Pacific, Cyberspace, in the Dark Dystopia
Posts: 19,118
Thanks Given: 2,351
Thanked 3,359 Times in 1,878 Posts
Note:
The interesting news is that we are now back on the cutting edge of web dev technology with Vue.
The good news is that Vue.js web dev is both powerful and really fun.
I encourage others to learn Vue with us and help us build new components for the forums or for your business or or personal web sites.
OBTW: Here is the current working code with setInterval(). Yes, we could move this function inside of vue (or alias vm.$children["0"]), but I am still looking for a better solution where setInterval() is not required and we can use vue to bind directly to changes in an external var (changes in the dev console, not when a page reloads).
Code:
Vue.component("unix-navbar", {
template: `<div class="neo-table-border vue-navbar">
<div class="vue-site-info">
<a class="vue-site-link" :href="url">{{name}}</a>
</div>
<div id="avatar" v-html="theavatar" @click="OpenMemberPanel()"></div>
</div>`,
data() {
return {
name: "The UNIX and Linux Forums",
url: "https://www.unix.com/",
id: vbuserId,
avatar: vbtheURL
};
},
computed: {
theavatar: function() {
if (this.id > 0)
return '<img id="avatar-img" src="' + this.avatar + '"></img>';
else return '<i id="avatar-icon" class="fas fa-user"></span>';
}
},
methods: {
OpenMemberPanel() {
if (this.id > 0) openMemberPanel();
else openLogin();
}
}
});
var vm = new Vue({
el: "#vue-navbar"
});
var timerID = setInterval(getUpdate, 1000);
function getUpdate() {
vm.$children["0"].id = vbuserId;
}
Also note that it has been nearly 24 hours and no one has responded to my question on this over in the vue forums, but it's the weekend so like here, maybe people are offline:
Location: Asia Pacific, Cyberspace, in the Dark Dystopia
Posts: 19,118
Thanks Given: 2,351
Thanked 3,359 Times in 1,878 Posts
In this example, we move setInterval() inside the Vue component.
However, this is still suboptimal, as the goal is to get Vue to react (be reactive) and update to changes to external JS vars in the dev console without reloading the page. This is simply a rearrangement of the code in the prior post. I want to bind the Vue instance to external var changes outside the DOM (outside the Vue instance), and have Vue react to this. The means that when we do vbuserId = "some new value" in the console, the avatar will change. The code below works, but only because it polls vbuserId every second.
We are still searching for a way to do this ....
Code:
Vue.component("unix-navbar", {
template: `<div class="neo-table-border vue-navbar">
<div class="vue-site-info">
<a class="vue-site-link" :href="url">{{name}}</a>
</div>
<div id="avatar" v-html="theavatar" @click="OpenMemberPanel()"></div>
</div>`,
data() {
return {
name: "The UNIX and Linux Forums",
url: "https://www.unix.com/",
id: vbuserId,
avatar: vbtheURL
};
},
computed:{
theavatar: function () {
if ( this.id > 0 )
return '<img id="avatar-img" src="' + this.avatar + '"></img>';
else
return '<i id="avatar-icon" class="fas fa-user"></span>';
}
},
methods: {
OpenMemberPanel() {
if ( this.id > 0 )
openMemberPanel();
else
openLogin();
},
GetUID() {
this.id = vbuserId;
}
},
created(){
var timerID = setInterval(this.GetUID, 1000);
}
});
var vm =
new Vue({
el: "#vue-navbar"
});
Sooner than later I will render forum discussions in Vue.js to complement the standard way of showing forum threads.
Today, I ran across this component, vue-code-highlight
Beautiful code syntax highlighting as Vue.js component.
https://www.unix.com/members/1-albums225-picture1199.jpg
... (1 Reply)
A number of people have asked me how to get started with Vue.js and my reply before today was to Google "Vue.js". That has changed and my recommendation to anyone who wants to learn the fastest growing, easiest to learn and use Vue.js web dev framework is to watch this video tutorial series:
... (0 Replies)
Vue Router has some quirks and on of the quirks is that it is not reliable when adding external links using the vue-router library.
After struggling with many solutions, I have found that creating a simple Vue.js component like this one seems to work the best (so far):
Component Example: ... (0 Replies)
Hey.
Someone find or write some jQuery code where we can select text with our mouse and then click or double click the highlighted / selected text and then it will wrap code tags around the highlighted text (in our editors).
:) (0 Replies)
So far, I have completed making the home page more responsive (except for the forum stats at the top and the WOL box at the bottom, they still use scroll bars).
xevV3_iZ8-s
For full screen use the link below and set your YT resolution to 1080p60 HD
https://youtu.be/xevV3_iZ8-s
Here is... (1 Reply)
I have just wrote this jQuery to the WOL page, so the table of users on line will not need scrollbars and will instead transform into a responsive table:
<script>
jQuery(document).ready(function (){
jQuery("#neo-who-flex-tcat").
css({"display":"flex","flex-flow":"row wrap",
... (0 Replies)