Привет всем, у меня проблемы со значением переменной.
Внутри запроса я сопоставляю значения каждого массива, если они совпадают, а затем обновляю переменную соответствовать до true, если они совпадают. Проблема в том, что возвращаемая переменная соответствовать не обновляется вне запроса после того, как она обновляется внутри запроса. Как я могу получить обновленное значение соответствовать?
Шаблон
<template>
<div>{{$acl(['post.edit'])}}</div> <!-- always display false -->
</template>
Плагин Nuxt
let match = false
let moduleName = ''
let actionName = ''
Vue.prototype.$acl = ( access ) => {
let bindAccess = access
storeRequest.then( done => {
_.each( bindAccess, ( value, index ) => {
moduleName = value.split('.')[0]
actionName = value.split('.')[1]
/**
* check if user access modules match with bindAccess module
*/
if ( aclConfig[moduleName] != undefined ) {
_.each( aclConfig[moduleName], ( actions, index ) => {
if (actions.action_name === actionName) {
match = true
return false
}
})
}
})
console.info(match) //returns true since their is a match
})
console.info(match) //always returns false
return match
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Обещание получить разрешение после, которое возвращает метод, поэтому match изменяется после возврата метода, поэтому вы всегда получите false.
Вы должны объявить поле в экземпляре компонента, а затем изменить эту переменную внутри плагина.
<template>
<div>{{$acl(['post.edit']), isAMatch}}</div>
</template>
и в плагине
Vue.prototype.$acl = ( access ) => {
let bindAccess = access
storeRequest.then( done => {
_.each( bindAccess, ( value, index ) => {
moduleName = value.split('.')[0]
actionName = value.split('.')[1]
/**
* check if user access modules match with bindAccess module
*/
if ( aclConfig[moduleName] != undefined ) {
_.each( aclConfig[moduleName], ( actions, index ) => {
if (actions.action_name === actionName) {
this.isAMatch = true
return false
}
})
}
})
})
// no need to return here
// return match
}
Вы должны использовать миксины, например:
{
data: () => {
return {
aclConfig
}
},
created() {
this.aclConfig = this.$store.getAclConfig(); // or maybe using Promise
},
methods: {
checkAccess(roles) {
let match = false;
_.each(roles, (role) => {
const splited = value.split('.');
const moduleName = splited[0];
const actionName = splited[1];
if (this.aclConfig[moduleName]) {
_.each(this.aclConfig[moduleName], (actions) => {
if (actions.action_name === actionName) {
match = true;
return false;
}
});
}
});
return match;
}
}
}
И вы можете использовать это в шаблоне следующим образом:
<template>
<div>{{ checkAccess(['post.edit']) }}</div>
</template>