2016-09-15 38 views
-6

有很多使用像ng-blur,ng-focus,表單驗證等新的角度指令的例子。它們在單個頁面中都很好用,或者在plinkr,jsfiddle等中,除了那些試圖在全局命名空間上定義函數的人之外,這個錯誤是WELL記錄的。參數'mainController'不是一個函數,沒有定義1.4

但是,我遇到了不同的問題。我正在使用example from Scotch.io。這一個很好......直到你將它引入到使用角度路由的SPA中爲止:(

經過與錯誤'爭論'mainController'的許多小時不是一個函數,得到了undefined',我發現從Hajder Rabiee .Thanks Hadjer評論的答案,愛你的男人

回答

0

Hajder離開this comment,並在其中,他說:

如果您使用的路線(大概率)和你的配置有一個參考一個未聲明爲依賴項的模塊中的控制器,則初始化可能會失敗。

比如假設你已經爲你的應用程序配置ngRoute,像

angular.module('yourModule',['ngRoute']) 
.config(function($routeProvider, $httpProvider) { ... }); 

在聲明路由塊小心,

.when('/resourcePath', { 
templateUrl: 'resource.html', 
controller: 'secondModuleController' //lives in secondModule 
}); 

申報secondModule爲後「ngRoute」應該解決這一問題的相關性。我知道我有這個問題。

即使有了這個幫助,我花了一分鐘的時間纔得到它的工作,所以我想我會在這裏分享我的示例代碼,以幫助下一個可憐的混蛋卡住這個。

首先,在我宣佈我的路線地點:

var app = angular.module('sporkApp', ['ngRoute','validationApp']); 
app.config(function ($routeProvider) { 
    $routeProvider 
     .when('/home', 
     { 
      controller: 'HomeController', 
      templateUrl: 'home/home.template.html' 
     }) 
     .when('/tags', 
     { 
      controller: 'TagsController', 
      templateUrl: 'tags/tags.template.html' 
     }) 
     .when('/test', 
     { 
      controller: 'mainController', 
      templateUrl: 'test/test.template.html' 
     }) 
     .otherwise({ redirectTo: '/home' }); 
}); 

然後,你需要的地方添加控制器代碼,在那裏將被裝載在你的shell頁:

// create angular app 
var validationApp = angular.module('validationApp', []); 

// create angular controller 
validationApp.controller('mainController', function($scope) { 

    // function to submit the form after all validation has occurred    
    $scope.submitForm = function() { 

     // check to make sure the form is completely valid 
     if ($scope.userForm.$valid) { 
      alert('our form is amazing'); 
     } 

    }; 

}); 

最後,您需要將相應的ng-appng-controller添加到包裝您要驗證的控件的某個頁面元素。我把下面的div標籤放在裏面:

<div ng-app="validationApp" ng-controller="mainController"> 
相關問題