错误:拒绝访问属性“拒绝”的权限
当我使用 Http 服务注入时,它会抛出错误
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
@Injectable()
export class ToDoService{
constructor (http: Http) {}
getTODOS():any{
return "";
// return this.http
// .get('https://jsonplaceholder.typicode.com/posts')
// .map(res => res.json().data);
}
}
答案 0 :(得分:6)
我在Firefox中遇到了同样的异常。 请尝试其他浏览器进行调试。
在我的情况下,FireBug仅显示"错误:拒绝权限访问属性"拒绝"",并且没有更多信息。
但在Chrome中,它显示更多内容,例如:
Error: Uncaught (in promise): Error: (SystemJS) Unexpected token <
SyntaxError: Unexpected token <
at Object.eval (http://localhost/UI/app/service/order/order.service.js:14:14)
at eval (http://localhost/UI/app/service/order/order.service.js:57:4)
at eval (http://localhost/UI/app/service/order/order.service.js:58:3)
Evaluating http://localhost/UI/node_modules/rxjs
Evaluating http://localhost/UI/app/service/order/order.service.js
Evaluating http://localhost/UI/app/component/order/order.module.js
Error loading http://localhost/UI/app/component/order/order.module.js
然后基于这些异常跟踪,我抓住了我的bug。 这里附上我的bug的根本原因供您参考。
在在线官方文档的一些示例中,它导入Observable with&#34;从&#39; rxjs&#39;;&#34;
导入{Observable}但它会导致我的项目中的先前异常。 将其更改为&#34;从&#39; rxjs / Observable&#39;中导入{Observable}; &#34;,那就没关系。
答案 1 :(得分:1)
尝试从rxjs包导入map
运算符。它解决了我的问题。
import 'rxjs/add/operator/map';
如果您使用do
和catch
方法,则应该再增加两个导入:
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
以下是您的ToDo服务的代码:
import {Injectable} from '@angular/core';
import {Http, Response} from '@angular/http';
import {Observable} from "rxjs/Observable";
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
@Injectable()
export class ToDoService {
constructor(private _http: Http) {
}
getToDos(): Observable<any> {
return this._http.get("https://jsonplaceholder.typicode.com/posts")
.map((response: Response) => response.json());
}
}
上查看已修改的代码
答案 2 :(得分:0)
您需要声明http
变量private或public才能访问它,否则它只会在构造函数中显示。
constructor (private http: Http) {}
答案 3 :(得分:0)
可能是因为拼写错误的模板引用变量。
<input id="user_name" #usernameUpdateRef="ngModel" name="user_name" class="form-control" type="text" required [(ngModel)]="testimonial.user_name"
/>
<div *ngIf="usernameUpdateRef.errors && (usernameUpdateRef.dirty || usernameaRef.touched)" class="alert alert-danger">
<div [hidden]="!usernameUpdateRef.errors.required">username is required</div>
</div>
usernameaRef错误拼写错误
答案 4 :(得分:0)
在我的情况下,我必须导入HttpModule
:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { HttpModule } from '@angular/http';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, HttpModule],
bootstrap: [AppComponent]
})
export class AppModule { }
答案 5 :(得分:0)
你必须像这样处理错误。
承诺
Promise.resolve("code to resolve Promise")
.then("code to execute on callBack")
.catch( reason => { console.log(reason) } )
On Observable(这是你的情况)
var subscription = source.subscribe(
data => console.log(data),
err => console.log(err)
);
尝试这个
getTODOS():any{
return this.http.get('https://jsonplaceholder.typicode.com/posts')
.map(res => res.json().data);
.catch(this.handleError);
}
public handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
答案 6 :(得分:0)
我看到它提到添加
import {Observable} from 'rxjs/Observable';
帮助。
答案 7 :(得分:-2)
我有一个类似的问题,并到达这里寻找解决方案。最后我发现我错过了&#39; http://&#39;来自网址。