角度ng模型不会通过

时间:2014-02-23 00:03:48

标签: javascript html angularjs

我正在开发一款应用,并试图通过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。

其他所有内容都在代码中运行。

任何帮助都将不胜感激。

1 个答案:

答案 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