尝试包含ngMaterial $ mdToast时,Angular Material"[$ injector:unpr]未知提供程序"错误,$ animate

nay*_*elo 6 javascript angularjs angular-material

我想在这个应用程序中使用ngMaterial:

Bower.json文件:

{
  "name": "x",
  "version": "0.0.0",
  "description": "x",
  "dependencies": {
    "bootstrap": "~3",
    "angular": "~1.4.7",
    "angular-resource": "~1.4.7",
    "angular-animate": "~1.4.7",
    "angular-mocks": "~1.4.7",
    "angular-bootstrap": "~0.13",
    "angular-ui-utils": "bower",
    "angular-ui-router": "~0.2",
    "angular-file-upload": "1.1.5",
    "angular-material": "~0.11.4"
  },
  "resolutions": {
    "angular": ">= 1.0.2"
  }
}
Run Code Online (Sandbox Code Playgroud)

配置JS文件:

module.exports = {
  client: {
    lib: {
      css: [
        'public/lib/bootstrap/dist/css/bootstrap.css',
        'public/lib/bootstrap/dist/css/bootstrap-theme.css',
        'public/lib/bootstrap/dist/css/angular-material.css'
      ],
      js: [
        'public/lib/angular/angular.js',
        'public/lib/angular-aria/angular-aria.js',
        'public/lib/angular-resource/angular-resource.js',
        'public/lib/angular-animate/angular-animate.js',
        'public/lib/angular-material/angular-material.js',
        'public/lib/angular-ui-router/release/angular-ui-router.js',
        'public/lib/angular-ui-utils/ui-utils.js',
        'public/lib/angular-bootstrap/ui-bootstrap-tpls.js',
        'public/lib/angular-file-upload/angular-file-upload.js'
      ],
Run Code Online (Sandbox Code Playgroud)

应用配置:

// Init the application configuration module for AngularJS application
var ApplicationConfiguration = (function () {

  // Init module configuration options
  var applicationModuleName = 'x';
  var applicationModuleVendorDependencies = ['ngResource', 'ngAnimate', 'ui.router', 'ui.bootstrap', 'ui.utils', 'angularFileUpload', 'ngMaterial'];

  // Add a new vertical module
  var registerModule = function (moduleName, dependencies) {
    // Create angular module
    angular.module(moduleName, dependencies || []);

    // Add the module to the AngularJS configuration file
    angular.module(applicationModuleName).requires.push(moduleName);
  };

  return {
    applicationModuleName: applicationModuleName,
    applicationModuleVendorDependencies: applicationModuleVendorDependencies,
    registerModule: registerModule
  };
})();
Run Code Online (Sandbox Code Playgroud)

然后:

// Use Application configuration module to register a new module
ApplicationConfiguration.registerModule('core');
ApplicationConfiguration.registerModule('core.admin', ['core']);
ApplicationConfiguration.registerModule('core.admin.routes', ['ui.router']);
Run Code Online (Sandbox Code Playgroud)

当我尝试在模块中引用ngMaterial,$ mdToast或$ animate时,它会失败,如下所示.如果没有下面的引用,html md-引用就没有错误,它们只是不能正常工作(它们会显示但没有'材料'功能).

控制器JS文件:

angular.module('core').controller('HeaderController', ['$scope', '$state', 'ngMaterial', 'Authentication', 'Menus', 
  function ($scope, $state, Authentication, Menus) {
// Add '$mdToast', '$animate',   $mdToast, $animate and the same error results 
Run Code Online (Sandbox Code Playgroud)

引发错误:

Error: [$injector:unpr] Unknown provider: ngMaterialProvider <- ngMaterial <- HeaderController
http://errors.angularjs.org/1.4.7/$injector/unpr?p0=ngMaterialProvider%20%3C-%20ngMaterial%20%3C-%20HeaderController
    at http://localhost:3000/lib/angular/angular.js:68:12
    at http://localhost:3000/lib/angular/angular.js:4289:19
    at Object.getService [as get] (http://localhost:3000/lib/angular/angular.js:4437:39)
    at http://localhost:3000/lib/angular/angular.js:4294:45
    at getService (http://localhost:3000/lib/angular/angular.js:4437:39)
    at Object.invoke (http://localhost:3000/lib/angular/angular.js:4469:13)
    at extend.instance (http://localhost:3000/lib/angular/angular.js:9136:34)
    at nodeLinkFn (http://localhost:3000/lib/angular/angular.js:8248:36)
    at compositeLinkFn (http://localhost:3000/lib/angular/angular.js:7680:13)
    at publicLinkFn (http://localhost:3000/lib/angular/angular.js:7555:30) <header data-ng-include="'/modules/core/views/header.client.view.html'" class="ng-scope" data-ng-animate="1">
Run Code Online (Sandbox Code Playgroud)

Mic*_*zos 9

ngMaterial是模块的名称,它不能注入控制器.您必须从以下行中删除它:

angular.module('core').controller('HeaderController', 
    ['$scope', '$state', 'ngMaterial', 'Authentication', 'Menus',  
    function ($scope, $state, Authentication, Menus) {  
Run Code Online (Sandbox Code Playgroud)

相反,ngMaterial应该添加到您的应用程序的模块依赖项中:

angular.module('appName', [..., 'ngMaterial', ...])
Run Code Online (Sandbox Code Playgroud)

然后,您可以$mdToast在控制器中注入角度材料组件.