ngswitch不工作,范围不对

时间:2014-02-25 02:02:53

标签: angularjs angularjs-directive angularjs-scope

<div class="col-md-12">
    <h4>Correct email?</h4>
    <div ng-switch on="changeEmail" >
        <div class="row" ng-switch-default >
            <div class="col-md-8">
                <p>EMAIL</p>        
            </div>
            <div class="col-md-4">
                <button class="btn btn-danger btn-xs" ng-click="changeEmail = true;">Change</button>
            </div>
        </div>
        <div class="row" ng-switch-when="true" >
            <div class="col-md-8">
                <div class="form-group">
                    <label for="exampleInputEmail1">Email address</label>
                    <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email">
                </div>        
            </div>
            <div class="col-md-4">
                <button class="btn btn-primary btn-xs" ng-click="confirmChangedEmail()">Confirm</button>
            </div>
        </div>
    </div>
</div>

控制器:

 .controller('settingsController',function($scope, User){

    $scope.partials = {
        accounts : appPartials + "settings/accounts.html"
      , plans : appPartials + "settings/plans.html"
      , notifications : appPartials + "settings/notifications.html"
    }
    $scope.partial = $scope.partials.notifications;

    $scope.confirmChangedEmail = function () {
        // Submit email
    }
})

我无法让开关工作,当我使用角度扩展时,我可以看到它不在同一范围内。有任何想法吗?我通过放settings.changeEmail进行了快速修复,但是有效,只是不确定为什么?

3 个答案:

答案 0 :(得分:3)

这有效http://plnkr.co/edit/xHfbt4Xgje0avCQpo3rx?p=preview和  这不是http://plnkr.co/edit/lJGQaNUefUfPK5dT7UBL?p=preview

以上原因无效的原因是changeEmail是在其自己的ng-switch范围内创建的 使用如下(使用$ parent) http://plnkr.co/edit/UOzqFLup5hdQhdqd5csZ?p=preview

或更好的方法是使用模型对象

$scope.user = {};
and then use user.changeEmail

答案 1 :(得分:2)

ng-switch创建了自己的范围。

当您在changeEmail中设置ng-click时,这不会修改您想要的changeEmail的值。如果您希望访问changeEmail范围内的ng-switch,请在其前面添加$parent,我相信这应该有用。

像这样:

<div class="col-md-4">
    <button class="btn btn-danger btn-xs" ng-click="$parent.changeEmail = true">Change</button>
</div>

强烈建议参考:https://github.com/angular/angular.js/wiki/Understanding-Scopes

答案 2 :(得分:1)

ngSwitch-匹配基于文字字符串值而不是表达式。

  

请注意,要匹配的属性值不能   表达式。它们被解释为要匹配的文字字符串值   反对。例如,ng-switch-when =&#34; someVal&#34;将与之相匹配   string&#34; someVal&#34;不反对表达的价值   $ scope.someVal。

http://docs.angularjs.org/api/ng/directive/ngSwitch

因此,您将ng-click更改为:

  <button class="btn btn-danger btn-xs" ng-click="$parent.changeEmail = 'true'">Change</button>

这是一个有一切工作的傻瓜:

http://plnkr.co/bYvY4deshw9vQ79fHjLP