我知道我的一些 BLOC 在整个应用程序生命周期中只会被实例化一次。将这些 BLOC 类创建为单例是不好的做法还是反模式。Singleton 可以帮助在任何地方访问 BLOC,并确保该类仅实例化一次。
我还可以确保在另一个 BLOC 中使用一个 BLOC 并传递单例时是安全的,就好像它是“只是另一个”实现一样。
这样做可能会产生什么影响?
我有两个区块
AuthenTicationBloc 必须使用其中的 UserBloc。如果我将 UserBloc 设为单例,那么将其用作 UserBloc().
否则,我必须在 AuthenTicationBloc 中创建 UserBloc 作为实例变量,如下所示:
class AuthenTicationBloc {
UserBloc _userBloc;
AuthenTicationBloc({@required UserBloc userBloc}) : _userBloc = userBloc;
myMethod(){
//use the userBloc
_userBloc.setDetails();
}
}
runApp(
UserBloc userBloc = UserBloc();
Provider(
value: AuthenTicationBloc(userBloc: userBloc),
child: MyApp(),
),
);
Run Code Online (Sandbox Code Playgroud)
如果我必须在其他地方的小部件链中使用 UserBloc,我必须使 UserBloc 也按如下方式全局提供,对吗?
UserBloc userBloc = UserBloc();
MultiProvider(
providers: [
Provider<AuthenTicationBloc>(
value: AuthenTicationBloc(userBloc:userBloc),
), …Run Code Online (Sandbox Code Playgroud) 无法更恰当地设置标题,对此表示抱歉。
我的数据属性中有一个[],其中充满了来自外部API的调用
我在模板v-for的主div上循环使用[] ,并填充页面
每个主div中都有一个可切换的div,默认情况下它是隐藏的,并且可以切换是否显示
这是代码
<template>
<div>
// MAIN DIV
<div v-for="(item, index) in myArray :key="index">
//populate the elements using revelevant data
<button @click="toggleDiv"">show/hide</button>
//togglelable div
<div v-if="displayDiv">
//some data
</div>
</div>
</div>
</template>
<script>
export default{
data(){
return{
myArray: [],
displayDiv: false
}
},
methods: {
toggleDiv(){
this.displayDiv = !this.displayDiv;
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
所以这是我的问题
当我单击特定div中的按钮以显示隐藏的div时,其余所有div的所有隐藏的div也都将显示
我如何限制这种情况的发生,以便在单击该div的相应按钮时仅切换相应的隐藏div
我应该使用key属性让vue区分div还是我应该使用任何逻辑
我有几个vuex模块。为了简单起见,我将以一个我所面临的例子来说明我的问题:
我有2个vuex模块firstModule.js和secondModule.js
firstModule.js有myArray[ ]它的状态:
//firstModule
const state = {
myArray: [//has some items]
}
Run Code Online (Sandbox Code Playgroud)
在secondModule.js中,我有一个动作,该动作可以从外部API异步获取一些数据。
此操作会产生一个突变,该突变应搜索firstModule的是否存在获取的数据 myArray[ ]
如果获取的数据存在于firstModule的中 myArray[ ],则将其添加到secondModule的 newArray[ ]
const state = {
newArray: []
}
const mutations = {
addToNewArray: (state, payload) => {
function findIyem(value){
return value === payload.data;
};
var item = payload.rootData.myArray.find(findItem);
state.newArray.push(payload.data);
}
}
const actions = {
fetchData: ({commit, rootState}) => {
// …Run Code Online (Sandbox Code Playgroud)为了清楚理解,我将以更笼统的方式解释我的问题,这是jsFiddle
我有两条主要路线,分别显示了两个不同的组成部分 router-view
单击路径1时,路径为:“ / route-1”
单击路径2时,路径为:“ / route-2 / sub-route-a”
Route-2的router-view内部包含另一个,显示两个子路由:
子路由
子路由b
当路由-2被点击它打开的部分路线-2与子路由一个预开设了router-view
Route-2内的主路由器视图和路由器视图都包装在keep-alivetag内,以便进行缓存
缓存,一切正常。
我添加了所有生命周期挂钩,并使用console.log查看调用了哪个挂钩
这是第一次对预期的全部组件beforeCreate(),created(),beforeMount(),mounted()钩子被调用。
由于router-view在keep-alive元素下,因此该activated()钩子也称为
每当我来回移动之间的Route-1和路径2的activated()和deactivated()输入并分别放置每个组件时钩子被称为
我的问题来了
从什么时候开始的Route-2被点击它打开的部分
路线-2与子路由一在其预先打开router-view,所有的生命周期挂钩子路由一个 componenents被称为只有一次
当我回去的Route-1 deactivated()的路由-2的调用,但没有勾子路径,一个被调用。
仅当我在 …
嘿,我试图在我的 url 中传递两个参数以用于一个简单的 spa,并且将使用 api 从 url 中提取参数值并将其传递到服务器,这里是 url:
http://localhost:8080/#/游戏/用户名/令牌
但是当我点击 url 时,它会在网络中传递这个:
请求网址:http://localhost:8080/api/game/usernametoken
因此它没有找到正确的 api
路由器:
{path:'game/:name/:token', name:'game', component: game }
Run Code Online (Sandbox Code Playgroud)
前端:
this.$http.get('/api/game/'+this.$route.params.name+this.$route.params.token)
Run Code Online (Sandbox Code Playgroud)
服务器端:
app.get('/api/game/:name/:token',function(req,res,err){
var tex = {push:false};
console.log("diplaying token from the server"+req.params.name+req.params.token)
res.end(JSON.stringify(tex));
})
Run Code Online (Sandbox Code Playgroud) 我正在学习 vue js,我创建了一个管理页面,当我使用 router-view 时我可以路由该页面,但是当我尝试 href 或 router-link 时,我无法加载模板,认为 url 已更改。
这是我的 main.js
import Vue from 'vue'
import VueResource from 'vue-resource'
import VueRouter from 'vue-router'
import App from './App.vue'
import admin from "./components/admin/admin.vue"
import users from "./components/users.vue"
Vue.use(VueRouter);
Vue.use(VueResource);
const router = new VueRouter({
routes: [
{path:'/admin',component:admin},
{path:'/users',component:users},
]
})
new Vue({
el: '#app',
router: router,
render: h => h(App)
})
Run Code Online (Sandbox Code Playgroud)
这是我的app.vue
这是我的应用程序 vue 文件,它只想通过 href 路由到页面
<template>
<div class = "container" id="app">
<h1>Hi from</h1>
<hr>
<a href="/api/users">sdsd</a>
</div>
</template> …Run Code Online (Sandbox Code Playgroud) 当用户访问该页面时,我希望页面只刷新一次.
但是,如果我把location.reload()在mounted().它会触发无限循环页面重新加载
vue.js ×6
vuejs2 ×4
javascript ×2
bloc ×1
dart ×1
flutter ×1
parameters ×1
routerlink ×1
routes ×1
singleton ×1
vue-router ×1
vuex ×1