2014-05-24 48 views
1

我有一個登錄路由和頁面在我的AngularJS應用與UI路由器。 在我的login.html部分加載ui-view我有一個登錄頁面,用戶名和密碼輸入綁定到credentials.username和credentials.password。如果我想在我的LoginCtrl中訪問這些證書,我會得到'未定義的用戶名'錯誤。訪問作用域綁定與UI路由器

app.js:

var myApp = angular.module('myApp', ['ui.router']); 

myApp.config(function($stateProvider, $urlRouterProvider) { 
    $stateProvider.state('login', { 
     url: '/login', 
     templateUrl: '/partials/login.html', 
     controller: 'loginCtrl' 
    }); 
}); 

loginCtrl.js:

myApp.controller('loginCtrl', function($rootScope, $scope) { 
    $scope.credentials.username = 'Test'; 
}); 

以我的partials/login.html的我有2個輸入與一個簡單的登錄表單:

<input type='text' name='username' ng-model='credentials.username' placeholder='Username...' autoFocus> 
<input type='password' name='password' ng-model='credentials.password' placeholder='Password...'> 

其中autoFocus是用於自動聚焦用戶名字段的自定義指令。表單顯示正常,但我仍然無法訪問我的控制器中的綁定。

我在做什麼錯?

回答

0

您得到「未定義用戶名」錯誤的原因是因爲$scope.credentials未定義,而您正在嘗試將值分配給$scope.credentials.username

,使這項工作的方法是先定義它:

$scope.credentials = {}; 
$scope.credentials.username = "someDefaultUsername"; 

的綁定會工作得很好用點 - 事實上,它是推薦的方式,由於與如何原型範圍繼承常見錯誤(但這是題外話):

<input ng-model="credentials.password" type="password"> 

題外話:般地情況下的指令,像autoFocus,需要進行非規範化成HTML複姓,否則將不被發現由Angular的編譯器。

<input ng-model="credentials.username" auto-focus>