2016-02-13 24 views
0

我是AngularJS的新手,我試圖在單擊按鈕時隱藏div。我正在做的工作正常,直到我把按鈕放在我試圖隱藏的div中(該按鈕正在使用不同的控制器)。該按鈕在從控制器中取出時按預期工作,所以我認爲這是範圍問題。任何幫助,將不勝感激。Div當控制器中的按鈕不會隱藏AngularJS

<form action="" name="signUpForm" class="heroForm" > 
     <div ng-hide="signUpB"> 
      <span id="signUpFormA"> 
        <input required type="email" /> 
        <input required type="password"/> 
        <span ng-controller="checkEmailCtrl"> 
         <input type="button" ng-click="signUpB=true"> 
        </span> 
      </span> 
     </div> 
     <div ng-show="signUpB"> 
      <span id="signUpFormB"> 
        <input required type="text"> 
        <input required type="text"> 
        <input type="submit"> 
      <span> 
     </div> 
</form> 

回答

0

是的,您正在設置signUpB=true的範圍爲checkEmailCtrl。你可以做這樣的事情:

<form action="" name="signUpForm" class="heroForm" ng-init="signUpB={value:false}"> 
     <div ng-hide="signUpB.value"> 
      <span id="signUpFormA"> 
        <input required type="email" /> 
        <input required type="password"/> 
        <span ng-controller="checkEmailCtrl"> 
         <input type="button" ng-click="signUpB.value=true"> 
        </span> 
      </span> 
     </div> 
     <div ng-show="signUpB.value"> 
      <span id="signUpFormB"> 
        <input required type="text"> 
        <input required type="text"> 
        <input type="submit"> 
      <span> 
     </div> 
</form> 

通過在物體包裹signUpB,該signUpB.value=true聲明將查找signUpB對象外的範圍,並設置它的value屬性爲true,任何修改都會進行上checkEmailCtrl的範圍。

0

ng-controller創建它自己的範圍。因此,在ng-click="signUpB=true"內,您正在修改此新範圍內的signUpB。

你可以通過使用一個對象來保存signUpB的狀態。基本上,用state.signUpB替換所有signUpB事件。並且,在外部控制器的作用域中定義狀態對象。

$scope.state = {signUpB: false // defaults to false} 

更好的方法是使用controllerAs語法。假設你的外部控制器是​​。你把它定義爲

ng-controller="OuterController as outerCtrl"

,並

outerCtrl.signUpB取代的signUpB所有出現,以確保您使用/修改outerCtrl的模型。