2014-02-23 57 views
0

我正在一個應用程序,並試圖通過ng-model像我在其他地方做的字符串。但是這個總是返回「未定義」。角ng模型不會通過

HTML:

<aside> 
    <p>List of objs:</p> 
    <ul> 
     <li class="objList" ng-repeat="obj in objs"> 
      <a href="" class="roomLink" ng-click="hideBool2 = true">{{ obj.topic }}</a> 
      <div class="appear" ng-show="hideBool2"> 
       <a href="" class="exit" ng-click="hideBool2 = false">X</a> 
       <input class="uName" ng-model="passWo" placeholder="Password"> 
       <button class="btn btn-default" ng-click="connectTo(obj.info)">OK</button> 
       <p ng-bind="message"></p> 
      </div> 
     </li> 
    </ul> 
</aside> 

所使用的控制器功能:

$scope.connectTo = function(rName) { 
     alert($scope.rooms[rName].password + " " + $scope.passWo) 
     if($scope.rooms[rName].password != "") { 
      if($scope.rooms[rName].password == $scope.passWo) { 
       socket.emit("joinroom", { room: rName, pass: $scope.passWo }, function(success, errorMessage) {}); 
       $location.path("/room/" + rName); 
      }else{ 
       $scope.message = "Wrong password"; 
      } 
     }else{ 
      alert($scope.rooms[rName].password); 
     } 
    } 

$scope.passWo總是返回undefined。

其他所有工作在代碼中。

任何幫助,將不勝感激。

+1

這是一箇中繼器內,試着去'this.passWo' – tymeJV

回答

1

問題是ng-model正在將值分配給其內部$scope。因此,當您調用connectTo函數時,它會在控制器範圍內找到$scope.connectTo,但使用$scope.passWo無法找到該值,因爲ng-repeat會爲每個項目創建一個範圍。

(如果你想使用一個範圍值),以克服這個最簡單的方法是創建控制器內部的容器對象:

$scope.cont = { passWo: '' }; 

然後你的視圖中,使用:

ng-model="cont.passWo"

這篇文章可以幫助你:http://jimhoskins.com/2012/12/14/nested-scopes-in-angularjs.html

+0

該做的招。謝謝你們的幫助和鏈接! – Mappan