2016-07-23 127 views
0

我有一個場景,當我的鼠標輸入一些文本我需要得到一個輸入框和文本應該隱藏,當我離開文本框框應該隱藏,我應該顯示文本回老鼠離開不能正常工作

,但這是不會發生

的Html

<div ng-app> 
<div ng-controller="showCrtl"> 
    <div ng-hide="showme"> 
    <p ng-mouseenter="showme=!showme"> 
     mouse enter 
    </p> 
    </div> 
    <input type="search" ng-if="showme" ng-mouseleave="showme=false"> 
</div> 
</div> 

JS:

function showCrtl($scope){ 
    $scope.showme=false; 
} 

這裏是我所試過的DEMO

任何幫助表示讚賞。

+0

請這個小提琴http://jsfiddle.net/dMTc2/17/ –

+0

能否請你說明我要去的地方錯了@CemArguvanlı –

回答

2

問題是你的原始值是ng-if指令,你知道ng-if在DOM上呈現該元素時確實會創建子範圍。要解決這個問題,我建議你要做的是,通過定義新的對象,按照Dot Rule。然後定義您想在該對象內使用的所有屬性。

如果您想深入瞭解範圍繼承的工作方式,您可以參考this answer

所以在你的代碼中,你應該定義一個對象,假設它是$scope.model = {},然後在該對象本身中有showme屬性。無論你在哪裏使用showme,請用model.showme替換。

Demo Fiddle


更方便的方式來解決這類範圍繼承問題是,你可以使用controllerAs模式。在那裏你不使用$scope裏面的控制器,你只需放置控制器上下文this。在視圖上使用控制器時,您需要創建別名,並且當您想要獲取變量值時,可以使用變量引用。

+0

由於其現在的工作 –

+1

@Shikhathakur樂意幫助你,看看更新的答案,會幫助你更清楚的理解。閱讀推薦的答案,以及:)謝謝:) –

1

問題是你有多個嵌套作用域。在輸入框中設置的showme與在p中設置的showme不同。發生這種情況是因爲Angular隱式地爲許多內置指令添加了一個新的範圍(ng-if是其中之一)。

你需要確保你總是設置和閱讀相同的showme屬性。最簡單的方法是將showme屬性添加到控制器。在您的模板直接

<div ng-app> 
    <div ng-controller="showCrtl"> 
    <div ng-hide="showCrtl.showme"> 
     <p ng-mouseenter="showCrtl.showme=!showCrtl.showme"> 
     mouse enter 
     </p> 
    </div> 
    <input type="search" ng-if="showCrtl.showme" ng-mouseleave="showCrtl.showme=false"> 
    </div> 
</div> 

事實上,作爲一個一般的經驗法則,從來沒有訪問的範圍,因爲它是非常困難的,以確保您的訪問,你以爲你是範圍:

試試這個訪問。始終通過您正在使用的控制器訪問屬性。

+0

感謝它現在的工作@Andrew Eisenberg –