2014-02-25 48 views
1
<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> 

控制器:ngswitch不工作,範圍是不對的

.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和那個工作,只是不知道爲什麼呢?

+0

你能告訴我們在哪兒你定義了範圍和你的控制器?此外,沒有必要在ng-click表達式中使用分號 – link64

+0

@ link64包含控制器 –

+0

This works http://plnkr.co/edit/xHfbt4Xgje0avCQpo3rx?p=preview並且這不會http://plnkr.co /編輯/ lJGQaNUefUfPK5dT7UBL?p =預覽 – madhured

回答

2

ng-switch創建它自己的範圍。

如果您在ng-click中設置了changeEmail,則這不會修改您打算使用的值changeEmail。如果你想在ng-switch範圍內訪問changeEmail,那麼以$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

1

ngSwitch,當基於文本字符串值,而不是表達式匹配。

請注意,匹配的屬性值不能是 表達式。它們被解釋爲字面值,以匹配 。例如,ng-switch-when =「someVal」將匹配 字符串「someVal」,而不是針對表達式 $ scope.someVal的值。

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

所以,你改變你的NG-單擊是:

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

這裏是一切工作的一個plunkr:

http://plnkr.co/bYvY4deshw9vQ79fHjLP