C # 7 + Solution заключается в использовании неявного синтаксиса кортежа.
private async Task<(bool IsSuccess, IActionResult Result)> TryLogin(OpenIdConnectRequest request)
{
return (true, BadRequest(new OpenIdErrorResponse
{
Error = OpenIdConnectConstants.Errors.AccessDenied,
ErrorDescription = "Access token provided is not valid."
}));
}
Результат возврата использует имена свойств, определенные сигнатурой метода. например:
var foo = await TryLogin(request);
if (foo.IsSuccess)
return foo.Result;
Браузер «читает» ваш html сверху вниз, и когда он встречает javascript или css, он останавливает рендеринг, пока не обработает его полностью. Вот почему во многих случаях предлагается размещать скрипты внизу. Обычно сценарий не может выполнять свою «работу» до тех пор, пока вся страница не будет отрисована, так почему же блокировать первоначальный рендеринг?
При этом, это лишь косвенная причина поведения, которое вы видите. Общий ответ на ваш вопрос заключается в том, что javascript также «читается» сверху вниз, поэтому любая переменная, не объявленная до ее использования, не определена (существует концепция под названием «Подъем», которая также влияет на это, но не актуальность на данный момент). В вашем случае, в частности, объект angular
еще не объявлен (если бы вы открыли консольные инструменты, вы бы увидели это как ошибку), и поэтому вы не можете вызвать ни один из методов, связанных с этим объектом. angular
объявлено в angular.js, который включен после вашего сценария в первом примере и (правильно) до во втором.
Если вы просто переместите свой сценарий внизу включенных сценариев в первом примере, вы увидите, что ваше приложение должно работать как положено
Очень просто. Все угловые функции, обработчики, компоненты & amp; директивы инициализируются в скрипте angulatjs
. Когда вы загрузите angularjs
внизу. Браузер загрузит скрипт после загрузки HTML
. Так что в начале нет angular
, поэтому он не будет захватывать {{value}}
, так что это просто обычный текст для браузера, Браузер покажет {{value}}
напрямую.
При загрузке сверху. Угловой будет загружен. Так что угловой умеет обращаться {{value}}
. Так что это будет связывать значение для {{value}}
.
Поместите свой скрипт в заголовок.
Эта рекомендация помещать его непосредственно перед закрывающим тегом, чтобы браузер сначала загружал содержимое страницы, а затем пользователь мог видеть что-то во время загрузки javascript. Если тег script находится вверху, то пользователь будет немного дольше смотреть на белую страницу, пока javascript не завершит загрузку, а затем контент начнет рендериться.
В вашем случае кажется, что вы не хотите, чтобы пользователь видел какой-либо контент перед запуском javascript ({{value}} raw html), поэтому имеет смысл полностью игнорировать эту рекомендацию.