2017-01-30 2 views
0

Я пытаюсь использовать маяк Малой приличия в новой функции, но, но редактор говорит мне, что имя не может быть найдено. Я знаю, что это довольно глупые вопросы, но я просто не может понять, как заставить его работать.Угловая 2 использовать свойство в новой функции

Это функция:

listenToBeaconEvents() { 
    this.events.subscribe('didRangeBeaconsInRegion', (data) => { 

     // update the UI with the beacon list 
     this.zone.run(() => { 

     this.beacons = []; 
     let beaconList = data.beacons; 
     beaconList.forEach((beacon) => { 
      let beaconObject = new BeaconModel(beacon); 
      this.beacons.push(beaconObject); 
      console.log(beacon.minor); 
     }); 
     }); 
    }); 
    } 

здесь, когда я console.log(beacon.minor) я получить ожидаемый результат, но если я пытаюсь получить доступ к нему вне этой функции больше не работает.

так:

isThatBeacon() { 
    if (beacon.minor == 12345) { 
    console.log('beacon found'); 
    } 
    } 

Спасибо.

UPDATE

Благодаря ответ НИЦАН, я не получаю сообщение об ошибке в редакторе, однако, когда я пытаюсь его на устройстве я получаю следующее сообщение об ошибке:

inline template:22:4 caused by: Cannot read property 'minor' of undefined 

HTML, выглядит следующим образом:

<button class="danger" (click)="isThatBeacon()">is working?</button> 

Спасибо.

+0

Вы не передаете экземпляр маяка своей функции в (нажмите) = "isThatBeacon()" .. это не сработает: if (beacon.minor == 12345) –

+0

Вам необходимо передать объект 'isThatBeacon' или индекс или что-то еще. –

ответ

2

Переменная beacon существует только в рамках функции, переданной в beaconList.forEach, вне этой области переменная не существует.

У вас есть несколько вариантов, в зависимости от того, что вы пытаетесь сделать:

(1) Пропустите индекс к isThatBeacon:

isThatBeacon(index: number) { 
    if (this.beacons[index].minor == 12345) { 
     console.log('beacon found'); 
    } 
} 

Но вы можете использовать этот метод только после асинхронной операции завершены.

(2) Пропустите фактический маяк для isThatBeacon:

isThatBeacon(beacon: BeaconModel) { 
    if (beacon.minor == 12345) { 
     console.log('beacon found'); 
    } 
} 
+0

Спасибо, что ответили. Я только что обновил свой вопрос. –

0

Немного другой подход здесь, чтобы найти маяк на основе на вашей стоимости вы можете сделать следующее:

isThatBeacon() { 
    let beacon = this.beacons.find(x => x.minor === 12345) 
    if(beacon != undefined) { 
    console.log('beacon found!') 
    } else { 
    console.log('no beacon found!') 
    } 
} 

Если вы действительно хотите найти определенный маяк на основе какого-то значения, вы можете передать это значение своей функции и искать это значение в своем массиве.

Идея, лежащая ниже раствора для случая, когда вы не всегда с использованием статического значения 12345, но значение может измениться, и что вы можете проверить, какие маяки, если они есть, и именно поэтому я хотел представить это решение поиска конкретного маяка. Но если вам не нужна эта функциональность, ответ Ницан, конечно, лучше! :)

isThatBeacon(value) { 
    let beacon = this.beacons.find(x => x.minor === value) 
    if(beacon != undefined) { 
    console.log('beacon found!') 
    } else { 
    console.log('no beacon found!') 
    } 
} 

Как ваша ошибка, что, вероятно, вызван проблемой асинхронной, что представление визуализируется до того, как данные были получены.Итак, где вы перечисляете свои маяки, вероятно, в некоторой итерации добавить *ngIf -statement, например, так:

<div *ngIf="beacons"> 
    <div *ngFor="let beacon of beacons">{{beacon.minor}}</div> 
</div> 

ИЛИ вы можете использовать безопасный навигационный оператор:

<div *ngFor="let beacon of beacons">{{beacon?.minor}}</div> 

Подробнее о безопасной навигации оператора here

+0

Это решило проблему? :) Если да, пожалуйста, подумайте о принятии этого ответа, так как другой ответ не решил вашу проблему. – Alex

Смежные вопросы