Angular Stormpath 注入未知提供程序

Angular Stormpath Injection Unknown Providor

我正在尝试将 angular ui 路由器与 angular 的风暴路径一起使用,但我不断收到未知提供商错误。我的代码如下,

var angular = require("angular");

// app.js
var app = angular.module('app', [require('angular-ui-router'), require("stormpath-sdk-angularjs")]);

app.config(function($stateProvider, $urlRouterProvider) {
    $urlRouterProvider.otherwise('/');
    $stateProvider
    .state('home', {
        url: '/',
        templateUrl: 'partials/home.html'
    })
    .state('about', {
        url: '/about',
        templateUrl: 'partials/about.html'
    });
})
.run(function($stormpath){
  $stormpath.uiRouter({
    loginState: 'login',
    defaultPostLoginState: 'home'
  });
});

这是错误页面,错误:$injector:unpr 未知提供商

通常您不会以这种方式使用 angular 依赖列表中的 require() 。相反你需要:

var app = angular.module('app', ['ui-router','stormpath']);

确保正确包含两个库。

前面的答案可能是解决方案的一部分。也许您正在使用一种工具来编译您的应用程序,例如 WebPack?这些信息会有用。请注意,Stormpath Angular SDK 在 Angular 命名空间中提供了两个模块,stormpathstormpath.templates。如果使用 browserify,您可能需要使用 require('dist/stormpath-sdk-angularjs.js')

P.S。我在 Stormpath 工作,如果您想与我们私下分享您的代码,请随时通过 support@stormpath.com 与我们联系。谢谢!

Stormpath 在他们的 module.exports 中使用了错误的模块名称(我在这里提出了一个错误 ~ https://github.com/stormpath/stormpath-sdk-angularjs/issues/80)。

现在,您可以这样做

var angular = require("angular");
require('stormpath-sdk-angularjs');

// app.js
var app = angular.module('app', [
    require('angular-ui-router'), // this one is fine
    'stormpath',
    'stormpath.templates'
]);

事实证明,stormpath sdk 将自身注入 angular。解决方法是在angular.

之后加载库
var angular = require("angular");
var stormpath = require("stormpath-sdk-angularjs");

var app = angular.module('app', [require('angular-ui-router'), "stormpath", "stormpath.templates"]);

app.config(function($stateProvider, $urlRouterProvider) {
    $urlRouterProvider.otherwise('/');
    $stateProvider
    //States Here
})
.run(function($stormpath){
    $stormpath.uiRouter({
        loginState: 'login',
        defaultPostLoginState: 'home'
    });
});

这是一个错误 stormpath-sdk-angularjs,已在版本 0.8.2 中修复。

要使其与 browserify 一起使用,请将这些行添加到您的 package.json:

"browser": {
  "stormpath": "./node_modules/stormpath-sdk-angularjs/dist/stormpath-sdk-angularjs.js",
  "stormpath.templates": "./node_modules/stormpath-sdk-angularjs/dist/stormpath-sdk-angularjs.tpls.js"
}

然后像这样要求它:

var angular = require("angular");

var app = angular.module('app', [
  require('angular-ui-router'),
  require('stormpath'),
  require('stormpath.templates')
]);