2015-11-07 20 views
5

ben bu uygulamada ngMaterial kullanmaya çalışıyorum:

Bower.json dosyası:

{ 
    "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" 
    } 
} 

yapılandırma JS dosyası:

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' 
     ], 

Uygulaması yapılandırma:

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

Ve sonra: aşağıda gibi modülünde animasyon ngMaterial, $ mdToast başvuru deneyin ya $ iken

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

O başarısız olur. Aşağıdaki referanslar olmadan html md-referansları üzerinde herhangi bir hata yoktur, sadece düzgün çalışmazlar ('maddi' işlevler olmadan gösterileceklerdir).

Kontrol JS dosyası:

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 

hata Atar:

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"> 

cevap

8

ngMaterial modülün adı, bir kontrol ünitesi enjekte edilemez. Aşağıdaki hatların çıkarmak zorunda:

angular.module('core').controller('HeaderController', 
    ['$scope', '$state', 'ngMaterial', 'Authentication', 'Menus', 
    function ($scope, $state, Authentication, Menus) { 

Bunun yerine, ngMaterial uygulamanızın modül bağımlılıkları eklenmelidir:

angular.module('appName', [..., 'ngMaterial', ...]) 

Sonra $mdToast gibi açısal-malzeme bileşenleri enjekte edebilir, kontrolörde.

+0

Teşekkür ederim, ngMaterial oraya referans verilmemeli ve direktifler onsuz çalışıyor olmalı? Direktifleri kullanmadan önce başka bir adımı kaçırıyor muyum? Başlangıçta sadece '$ mdToast', '$ animate' referansını kullandım ve aynı hataları attılar - orada olmalılar mı? Hızlı yanıt için çok teşekkür ederim! – nayelo

+0

Uygulamanızın modül bağımlılıklarına 'ngMaterial' ekledikten sonra, direktifinize $ mdToast'ı enjekte edebilirsiniz. –

+0

Ah, teşekkürler! ngMaterial, uygulama yapılandırmasında (yukarıda eklenmiştir) başvuruda bulunur, ancak açık bir şekilde çalışmayan bir şey vardır. Çok net bir açıklama için tekrar teşekkürler. – nayelo

İlgili konular