2014-09-03 29 views
1

所以我想使我的第一個角的應用程序,到目前爲止,一切工作良好時,我試着做了一下表單驗證的,這就是我到目前爲止有:

angularsap.js: 

var app = angular.module('PugMe', ['ngRoute', 'ngAnimate']); 

app.config(function($routeProvider) { 
    $routeProvider 
    .when('/', { 
     controller: 'HomePage', 
     templateUrl: '/partial/home' 
    }) 

    .when('/login', { 
     controller: 'Login', 
     templateUrl: '/partial/login' 
    }); 
}); 

app.controller('HomePage', function($scope) { 
    bgColor('white'); 
    active = 'link1'; 
}); 

app.controller('Login', function($scope) { 
    bgColor('#eee'); 
    active = 'login'; 
    console.log($scope); 

}); 

然後我

index.html 

<html ng-app="PugMe"> 
    .. normal stuff .. 
    <div ng-view> 
    </div> 
</html> 

然後我

的login.html

<div class="container"> 
    <form class="form-signin" role="form" method='post' action='/login' name="loginForm" novalidate> 
     <h2 class="form-signin-heading">Please sign in</h2> 
     <p class="alert alert-danger" ng-hide="loginForm.$valid">{{loginForm.email}}</p> 
     <input name='email' ng-model="email", placeholder="Email" type="email" class="form-control" placeholder="Email address" required autofocus> 
     <input name='password' ng-model="password", type="text" class="form-control" required value="{{loginForm.email}}"> 
     <button class="btn btn-lg btn-primary btn-block" type="submit" ng-disabled="loginForm.$invalid">Sign in</button> 
    </form> 
</div> 

我的問題是我似乎沒有任何$scope控制,當我做

console.log($scope)它返回一個對象(見圖片) <code>console.log($scope)</code> it returns an object (see picture)

但如果我這樣做console.log($scope.loginForm);返回undefined ..爲什麼我這麼困惑。期待回覆謝謝。

編輯:忽略隨機{{}},他們只是在那裏進行調試變量。

我的模板是.ejsnode後臺,我不知道如何重要的是,但文件被保存爲.html我加app.engine('html', require('ejs').renderFile);

更新,如果我console.log(this)我得到一個空的對象我不不知道這是什麼意思。

+1

@Dalorzo定義我認爲這是汽車宣佈時的形式,你可以在圖片中看到登錄表單,如果我點擊它,它會顯示其他的東西 – Datsik 2014-09-03 04:20:14

回答

0

控制器被加載時,不加載的HTML,你可以做的就是添加onLoad事件處理程序NG-視圖。

<div ng-view onload="onLoad()"> 


app.controller('Login', function($scope) { 
    bgColor('#eee'); 
    active = 'login'; 
    console.log($scope); 
    $scope.onLoad=function(){ 
     console.log($scope); 
    } 

}); 

或者,如果您在其他一些事件的按鈕做console.log($scope);click,那麼你將有form加載。

0

這是因爲JavaScript通過參考使用對象,數組和功能,而所有其它類型由值處理。

在這種特殊情況下,當您試圖控制$ scope.loginForm時,它尚未被定義,並且在控制檯上您看到它,因爲您看到的是控制檯上的參考,它會自動更新。

如果你嘗試做的console.log(JSON.stringify($範圍));你會認爲loginForm不在日誌中。

一個黑客來檢查,如果這是一個同步的問題將在你的登錄控制器添加此

$timeout(function(){ 
    //whatever you want to do such as console.log($scope.loginForm); 
}, 0); 

這樣AngularJS將執行之後等到當前$消化週期結束和開始一個新的回調在$超時