错误:拒绝访问属性“拒绝”的权限

时间:2016-11-23 09:48:11

标签: angular

  

错误:拒绝访问属性“拒绝”的权限

当我使用 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);
    }  
}

8 个答案:

答案 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';

如果您使用docatch方法,则应该再增加两个导入:

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());
  }
}

Plunker

上查看已修改的代码

答案 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

来自app.module.ts的

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;来自网址。