2014-02-23 31 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