Каков лучший метод получения Int32 от первых четырех байтов GUID?

Во-первых, обратите внимание, что это исключение будет генерироваться только при запуске вашего приложения в режиме dev (что по умолчанию имеет значение по умолчанию в бета-0): Если вы вызываете enableProdMode() при загрузке приложения он не будет сброшен ( см. обновленный plunk ).

Во-вторых, не делайте этого, потому что это исключение генерируется по уважительной причине: Короче говоря, когда в режиме dev каждый раунд обнаружения изменений сразу же сопровождается вторым раундом, который проверяет, что никакие привязки не изменились начиная с конца первого, так как это указывает на то, что изменения вызваны самим обнаружением изменения.

В вашем плунге привязка {{message}} изменяется вашим вызовом на setMessage(), что происходит в крюк ngAfterViewInit, который происходит как часть начального поворота обнаружения изменений. Это само по себе не является проблематичным - проблема в том, что setMessage() изменяет привязку, но не вызывает новый раунд обнаружения изменений, а это означает, что это изменение не будет обнаружено до тех пор, пока какой-либо другой раунд обнаружения изменений не будет запущен где-то в другом месте ,

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

Обновление в ответ на все запросы для примера того, как это сделать: @ Решение Tycho работает, как и три метода из , на которые указывает ответ @MarkRajcok. Но, честно говоря, все они кажутся уродливыми и неправильными для меня, такими, как хаки, которые мы привыкли опираться на ng1.

Конечно, существуют случайные обстоятельства, когда эти хаки подходят, но если вы используете их на чем-либо более, чем очень случайным образом , это признак того, что вы боретесь с каркасом, а не полностью обнимаете его реактивный характер.

ИМХО, более идиоматический подход «Угловой 2» приближается к этому, это что-то вроде: ( plunk )

@Component({
  selector: 'my-app',
  template: `
I'm {{message | async}}
` }) export class App { message:Subject = new BehaviorSubject('loading :('); ngAfterViewInit() { this.message.next('all done loading :)') } }

5
задан rafek 5 September 2008 в 11:25
поделиться

3 ответа

Я не думаю, что существует лучшее решение, чем это.

3
ответ дан 15 December 2019 в 01:16
поделиться

Я не знаю, лучше ли это, но легче читать:

Int32. Синтаксический анализ (sample_guid. ToString ().SubString (0,1));

Я - младший разработчик, по общему признанию, но вышеупомянутые чтения, легче мне, чем преобразование байта, и на современном компьютере, это работало бы неразличимо быстро.

1
ответ дан 15 December 2019 в 01:16
поделиться

Не знайте о лучшем решении, но я надеюсь, что Вы не намереваетесь использовать это Int32 в качестве случайного (или уникальный) значение.

Вы не можете зависеть ни от какой sub части Гуида, чтобы быть уникальными. Гуид, как предполагается, уникален только в целом.

0
ответ дан 15 December 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: