我目前正在关注AngularJS的教程.这是我的controllers.js文件中的代码.
- 'use strict';
- angular.module ( 'F1FeederApp.controllers',[] )
- .controller ( 'driversController',function ( $scope,ergastAPIservice ) {
- $scope.nameFilter = null;
- $scope.driversList = [];
- ergastAPIservice.getDrivers ().success ( function ( response ) {
- $scope.driversList = response.MRData.StandingsTable.StandingsLists [ 0 ].DriverStandings;
- });
- });
我收到以下错误:
1)$sceDelegate策略不允许阻止来自url的加载资源.
2)TypeError:ergastAPIservice.getDrivers(…).success不是函数
我根本不确定导致这些错误的原因,我对Angular很新.我在我和其他例子之间看到的唯一可能的差异是在这段代码中:(services.js)
- 'use strict';
- angular.module ( 'F1FeederApp.services',[] )
- .factory ( 'ergastAPIservice',function ( $http ) {
- var ergastAPI = {};
- ergastAPI.getDrivers = function () {
- return $http ({
- method : 'JSONP',url : 'http://ergast.com/api/f1/2013/driverStandings.json?callback=JSON_CALLBACK'
- });
- };
- return ergastAPI;
- });
我注意到的差异在于我的getDrivers函数末尾有一个分号,并且我在文件顶部也有use strict语句.但是,grunt拒绝在没有这两行的情况下运行应用程序,所以我不认为这可能是问题.
如果有人能指出我在这里正确的方向,我将非常感激.
解决方法
问题#1:
您尝试从应用中请求的网址不安全
根据AngularJS sceDelegatePolicy.要解决它,你需要
使用resourceUrlWhitelist方法将应用中的网址列入白名单
在$sceDelegateProvider如下图所示:
- angular.module('myApp',[]).config(function($sceDelegateProvider) {
- $sceDelegateProvider.resourceUrlWhitelist([
- // Allow same origin resource loads.
- 'self',// Allow loading from our assets domain. **.
- 'http://ergast.com/**'
- ]);
对于清楚的解释和上面的例子是从here
问题#2:
错误TypeError:ergastAPIservice.getDrivers(…).success的问题可能是由于您正在使用的AngularJS版本.传统的.success / .error方法现在已在最新的AngularJs 1.6版中弃用.这是Deprecation notice如果您使用的是最新的AngularJs,那可能就是原因,否则,我们需要更多信息来调试问题.