我正在开发一款应用,并试图通过ng-model
传递一个字符串,就像我在其他地方一样。但是这个总是返回“未定义”。
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。
其他所有内容都在代码中运行。
任何帮助都将不胜感激。
答案 0 :(得分: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