2014-09-27 45 views
3

我正在使用angular和passport進行用戶驗證;我試圖在保存表單時傳遞登錄的用戶標識,但無法使其工作。 我的代碼非常簡單:AngularJS - 使用參數調用ng-submit

site.jade: 

div(ng-controller='sitesController') 
    h1 #{user.local.email} 
    form.(ng-submit="createSite(user)") 
     label Site Name 
     input.(type="text" ng-model="siteName") 
     button.btn.btn-primary(type="submit") Save 


sitesController.js 

$scope.createSite = function (user) { 
     console.log(user); // user = undefined 
} 

用戶永遠是「未定義」(在執行console.log),即使我能夠顯示電子郵件。

任何想法?

感謝

+0

你的意思是不做一個額外的'$ http'請求嗎? – Pytth 2014-09-27 19:58:42

+0

表單和用戶之間的連接在哪裏?所顯示的代碼片段似乎脫節。什麼是'siteName'? – charlietfl 2014-09-27 21:00:07

+0

我有一個名爲網站SiteName和其他模型,但我認爲這是無關緊要的(?)。 siteController.js是上述ng-controller引用的控制器實現。 – 2014-09-27 21:20:44

回答

3

怎樣的形式應該知道user是什麼?未定義的原因是因爲您尚未定義它。爲什麼不這樣做呢?

site.jade: 

div(ng-controller='sitesController') 
    h1 #{user.local.email} 
    form.(ng-submit="createSite()") 
      //removed the argument from above. 
     label Site Name 
     input.(type="text" ng-model="siteName") 
     button.btn.btn-primary(type="submit") Save 


sitesController.js 

$scope.createSite = function() { 
     console.log($scope.siteName); 
} 

在你$scope.createSite()功能,價值user是不一樣的價值,因爲它會被外界的功能。原因是當user的值被用作函數定義中的參數時,試圖調用該值 - 就像您在console.log(user)聲明中所做的那樣 - 您實質上是在說「console.log傳遞的值進入這個功能。「如果您已經知道這一點,請原諒我,但是在JavaScript函數中,參數只作爲函數被調用的值的引用。

這裏有一點JSfiddle to illustrate my point

+0

感謝您的詳細解答。也許我錯過了你答案中的某些東西;我不想用過多的代碼來複雜化我的問題。正如我所說,我可以打印用戶電子郵件(請參閱h1標籤)。 您的代碼不能解決我的問題,因爲我需要將用戶ID傳遞給createSite函數。 – 2014-09-28 05:51:09

+0

請原諒我的困惑。當用戶訪問表單時,他們是否已經登錄? – Pytth 2014-09-28 14:44:35