Angular 8 обещание разрешения (true) не возвращает true в нескольких ролях - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь использовать охранников ролей, и я хочу отправить несколько ролей одновременно, но проблема в том, что когда я отправляю информацию из файла app.routing, я не получаю ожидаемый результат, если я объявляю таблицу внутри файла guard.ts, она работает нормально, и я не знаю почему.

вот как я отправляю роли, которые хочу отправить в app.routing.ts:

canActivate: [AfterLoginGuard],
data: {
  expectedRole: ['role1','role2']
}

и в файле guard.ts:

, когда я объявляю таблицу как:

 let expectedRole = ['role1','role2'];

, она работает нормально, и я перешел на нужный мне маршрут

Но если получить данные из app.routing.ts как:

let expectedRole = route.data.expectedRole;

, это не работает. Это функция, с которой я работаю:

       for (let child in expectedRole ) {

    let test = expectedRole[child]; // to see if the value is readable or not
    console.log(test);

    if ( 'role2'=== expectedRole[child]) {
      console.log(expectedRole[child]);
      resolve(true);
    }
  }

NB: 1) когда я отправляю только одну роль, что означает, что я не использую l oop, она работает нормально. 2) чего я не понял, так это того, что когда я объявляю массив внутри файла guard.ts в консоли, я получаю две роли в переменной test, и тогда она работает. Но когда я получаю роли из app.routing.ts, я получаю в консоли что-то вроде этого:

role1
role2
r
o
l
e
2 // if I am wanting the role 2 for example

это как будто даже после того, как if найти правильное значение, он считает его новым массивом .

не могли бы вы рассказать мне, почему это не работает, когда я получаю роли из app.routing.ts?

1 Ответ

0 голосов
/ 05 августа 2020

Попробуйте это.

for (let child of expectedRole ) {

  if ( 'role2'=== child) {
    console.log(child);
    resolve(true);
  }
}
...