2016-03-21 3 views
2

In app.js undefined habe ich habe:Fehler: [ng: AREQ] Argument 'controller' ist keine Funktion,

(function(){ 
    var app = angular.module("myApp", []); 
})(); 

in process.js die nachapp.js enthalten ist, ich habe:

(function(){ 
    app.controller('ProcessController', ['$http', function($http){ 
     this.something = "Test" 
    }]); 
}); 

und in meiner HTML Datei habe ich eine div

<html class="no-js" lang="en" ng-app="myApp"> 
... 
    <div class="row" ng-controller="ProcessController"> 

Dies ist ein Fehler in meiner Konsole werfen:

Error: [ng:areq] Argument 'ProcessController' is not a function, got undefined 

Ich bin ziemlich neu in Winkel- und habe nie zuvor so mehrere Dateien. Was mache ich falsch?

+0

Sie müssen 'var app = angular.module (" myApp ");' in der process.js vor dem 'app.controller (...)' setzen. –

+0

@ShaohaoLin sollte nicht "app" aus der Datei im Lieferumfang enthalten sein? Der Fehler beklagt sich nicht, dass "App" nicht existiert. – Deekor

Antwort

5

Verwenden angular.module("myApp") in andere JS-Datei & nicht vergessen-Funktion aufrufen, die Sinn machen IIFE pattern zu haben, die Sie ProcessController Controller zur Verfügung stellen helfen.

-Code

(function(){ 
    angular.module("myApp") 
    .controller('ProcessController', ['$http', function($http){ 
     this.something = "Test" 
    }]); 
})(); //<--() function should get called to self execute it. 
+0

Das war ein Teil des Problems ...' var app = angular.module ("myApp") hinzuzufügen; 'wie @slackmart vorgeschlagen war das zweite Teil des Puzzles – Deekor

+0

@Deekor' angular.module ("myApp") 'sollte da ideal sein .. wieso willst du' var app = angular.module ("myApp"); 'wieder da.?Ehrlich, ich verstehe nicht, was du sonst noch willst. –

+0

IIFE steht für sofort aufgerufenen Funktionsausdruck. Für weitere Informationen über IIFE, werfen Sie einen Blick auf dieses Repo: https://github.com/shaohaolin/You-Dont-Know-JS/blob/master/scope%20&%20closures/ch3.md –

2

Ändern Sie Ihre process.js zu:

(function(){ 
    var app = angular.module("myApp"); 
    app.controller('ProcessController', ['$http', function($http){ 
     this.something = "Test" 
    }]); 
})(); 

Sehen Sie sich auch die Syntax zu verwenden: ng-controller="ProcessController as process", um den Zugang zu this.something varialble nach {{ process.something }} in Ihrer Vorlage zu haben.

+0

sollte nicht "app" aus der Datei im Lieferumfang enthalten sein? Der Fehler beklagt sich nicht, dass "App" nicht existiert. – Deekor

+0

auch ich versuchte Ihre Antwort und bekam den gleichen Fehler: -/ – Deekor

+0

In app.js definieren Sie Ihr Modul, dann innerhalb process.js müssen Sie die Moduldefinition erhalten, um Ihren ProcessController zu definieren. Mit anderen Worten: Die Funktion angular.module kann als Setter verwendet werden ('angular.module ('modName', [/ * dependencies * /]);' oder als Getter (zB 'angular.module ('modName') ; ' – slackmart

1

An der Spitze Ihres app.js

var app = angular.module('myApp', ['myApp.controllers']); 

An der Spitze Ihres processor.js

var app = angular.module('myApp.controllers', []); 
+0

Sie sollten wahrscheinlich detaillierter antworten, wie "Sie sollten hinzufügen [was] [wo] [zusätzlich/statt] [was Sie jetzt haben]" – YakovL

0

'use strict'; Definiert, dass JavaScript-Code im "strict mode" ausgeführt werden soll. so braucht es zuerst Deklaration dann Definition. Wenn Sie also das in app.js & hinzugefügte Modul zu index.html deklariert, aber nicht in das mainApp-Modul eingefügt haben, haben Sie Chancen, dass ngareq ControllerName keine Funktion oder nicht definiert ist. Hoffe, es würde helfen.