GET http://localhost: 4200/null 404 (не найдено) в angular2 с angular -cli
Я работаю с проектом angular2 с angular -cli.
Сегодня я обновил версию ниже до 2.4.1.
"@angular/common": "~2.4.1",
"@angular/compiler": "~2.4.1",
"@angular/compiler-cli": "^2.4.1",
"@angular/core": "~2.4.1",
"@angular/forms": "~2.4.1",
"@angular/http": "~2.4.1",
"@angular/platform-browser": "~2.4.1",
"@angular/platform-browser-dynamic": "~2.4.1",
"@angular/router": "~3.4.1",
"angular-cli": "^1.0.0-beta.24"
Когда я использовал 2.0.0, он не делает ошибку, но теперь он делает ошибку, например GET http://localhost:4200/null 404 (Not Found)
.
Несмотря на то, что он делает ошибку, он работает хорошо.
Однако я хочу знать, почему это происходит, и исправить эту ошибку.
Если кто-нибудь знает об этом, пожалуйста, дайте мне знать.
Спасибо:)
Packages.json
{
...
"private": true,
"dependencies": {
"@angular/common": "~2.4.1",
"@angular/compiler": "~2.4.1",
"@angular/compiler-cli": "^2.4.1",
"@angular/core": "~2.4.1",
"@angular/forms": "~2.4.1",
"@angular/http": "~2.4.1",
"@angular/material": "^2.0.0-beta.0",
"@angular/platform-browser": "~2.4.1",
"@angular/platform-browser-dynamic": "~2.4.1",
"@angular/router": "~3.4.1",
"@types/moment-timezone": "^0.2.33",
"angular-cli": "^1.0.0-beta.24",
"angular2-google-maps": "^0.17.0",
"bootstrap": "^3.3.7",
"bourbon": "^4.2.7",
"core-js": "^2.4.1",
"es6-promise": "^4.0.5",
"font-awesome": "^4.7.0",
"hammerjs": "^2.0.8",
"moment": "^2.17.1",
"moment-timezone": "^0.5.10",
"node-sass": "^3.13.0",
"primeng": "^1.1.0",
"pubnub-angular2": "^1.0.0-beta.6",
"quill": "^1.1.8",
"rxjs": "5.0.1",
"ts-helpers": "^1.1.1",
"typescript": "^2.0.10",
"typings": "^2.1.0",
"zone.js": "^0.7.4"
},
"devDependencies": {
"@types/hammerjs": "^2.0.33",
"@types/jasmine": "^2.2.30",
"@types/moment": "^2.13.0",
"@types/moment-timezone": "^0.2.33",
"@types/node": "^6.0.42",
"angular-cli": "^1.0.0-beta.24",
"bootstrap-sass": "^3.3.7",
"codelyzer": "~0.0.26",
"jasmine-core": "2.4.1",
"jasmine-spec-reporter": "2.5.0",
"karma": "1.2.0",
"karma-chrome-launcher": "^2.0.0",
"karma-cli": "^1.0.1",
"karma-jasmine": "^1.0.2",
"karma-remap-istanbul": "^0.2.1",
"protractor": "4.0.9",
"ts-loader": "^1.3.3",
"ts-node": "1.2.1",
"tslint": "4.2.0",
"typescript": "2.0.2"
}
}
Ответы
Ответ 1
Так что у меня было утомительное время, чтобы понять это, но я сделал.
Это случилось со мной сразу после обновления, но это не имело никакого отношения к этому.
Это определенно ссылка на переменную с нулевым значением и, скорее всего, атрибут src изображения. По крайней мере, это было для меня, и я использую значения с сервера повсюду в моем приложении, и img
src были единственными причинами, и это имеет смысл.
У меня было что-то похожее на это:
<img [src]="myData?.imageUrl">
Я думал что то ?
Безопасный оператор удостоверится, что я не получил нулевые ошибки, что обычно происходит, но, похоже, когда вы связываетесь с атрибутом src
, браузер выдает ошибку, а не компилятор. Компилятор позволяет привязать к нему значение null из-за оператора safe, но поскольку src
является ссылочным URL-адресом, браузер все еще ищет этот URL-адрес, и консоль выдает ошибку, поскольку не может найти relative/app/path/null
URL-адрес relative/app/path/null
Два способа, которые я нашел, чтобы решить эту проблему:
- Используйте ngIf:
<img *ngIf="myData" [src]="myData.imageUrl"/>
(все изображение и его атрибут src никогда даже не загружаются, если нет данных, что полностью <img *ngIf="myData" [src]="myData.imageUrl"/>
проблему) - Используйте интерполяцию:
<img src="{{ myData?.imageUrl }}"/>
(ВНИМАНИЕ: в этом решении вам все еще нужен безопасный оператор, потому что компилятор выдаст ошибку иначе, как и ожидалось, но теперь, если значение равно нулю, затем src=""
вместо нуля, который является допустимым HTML и не будет выдавать ошибку ссылки)
Надеюсь это поможет!
Ответ 2
В дополнение к запросу HauntedSmores: вы также можете использовать ''
-fallback:
[src]="myObj.img || ''"
поскольку elvis-operator ?
недоступен в .ts файлах, но только в шаблонах, вы также можете поместить его в typescript -getters.
Ответ 3
Происходит то, что некоторые браузеры (например, Chrome) выполняют некоторую функцию toString
для атрибута src
, что приводит к тому, что null
становится 'null'
вместо ''
, таким образом вызывая браузер для поиска //domain.com/null
.
Некоторые могут вспомнить ng-src
из AngularJS, который был создан для этого.
В любом случае, после множества вариантов я нашел следующие решения:
<img [attr.src]="myImageUrl"/>
Это работает и для async
(который в основном вызывал эту проблему для меня):
<img [attr.src]="myImageUrl | async"/>
Это работает, потому что вместо установки src
в 'null'
или ''
, атрибут src не устанавливается вообще, пока используемая переменная/путь не установлена /не разрешена, поэтому не вызывает ошибку.
Ответ 4
В моем случае ошибка произошла из-за использования несуществующего свойства из моего шаблона (немой меня). Мой код был таким:
<img [src]='imageUrl'/>
Но базовый класс для шаблона имел свойство с именем:
imageURL: string;
Итак, я изменил imageUrl
на imageUrl
и работал как шарм!
Ответ 5
ИЛИ Когда их значение равно нулю/нет в нашем объекте, мы можем вместо этого дать статическое изображение
HTML
<img src={{row.webimage?row.webimage:localpath}}/>
Typescrpit
localpath = '../assets/img/default-user.png'
Точно так же мы можем использовать привязку для атрибута src.
Ответ 6
С троичным оператором:
[ngStyle]="{'background-image': myVariable? 'url(' + myVariable.image + ')' : 'none'}"