2014-06-26 30 views
1

我想要一個懸停彈出窗口,只有當我將鼠標懸停在屏幕上的一個元素上時纔會顯示。我目前正在使用$ modal模式,並認爲我可以使用它。我遇到的問題是,我不確定如何讓模式在我不再瀏覽頁面元素時消失。在模態中不需要任何動作,我只是希望它在出現在元素上時出現,當我離開元素時消失。

這裏是我的plunkr:http://plnkr.co/edit/3vWVRA0CM7vrMugImgmX?p=preview

這裏是我要找的使用jQuery的例子:http://www.sundoginteractive.com/sunblog/posts/jquery-hover-box

var myApp = angular.module('myApp', ['ui.bootstrap']); 

myApp.controller('myCtrl', ['$modal', '$scope', '$log', 
    function ($modal, $scope, $log) { 
     $scope.option = { 
     name: 'Name (hover over for more details)', 
     longDescription: 'This is my detailed description... lots of text here' 
     } 
     $scope.showOptionDetails = function(option) { 
      $log.info($scope.option); 
      $scope.optionModal = $modal.open({ 
       template: '<div class="modal-header"><h3 class="modal-title">Option</h3></div><div class="modal-body">{{option.longDescription}}</div><div class="modal-footer"></div>', 
       controller: 'modalCtrl', 
       resolve: { 
        option: function() { 
         return $scope.option; 
        } 
       } 
      }); 
     } 

     $scope.closeOptionDetails = function() { 
      $scope.optionModal.close(); 
     } 
     } 
    ]); 

    myApp.controller('modalCtrl', [ 
    '$modalInstance', '$scope', '$log', 'option', function ($modalInstance, $scope, $log, option) { 
     $log.info(option); 
     $scope.option = option; 
    } 
]); 
+0

鼠標離開事件不發射的原因是因爲'ng-mouseleave =「closeOptionDetails」'應該是'ng-mouseleave =「closeOptionDetails()」'。但是,當模式一創建就消失,你仍然不會獲得你想要的行爲。一個popover會滿足你的需求嗎? –

+0

是的,我認爲popover可以滿足我的需求。儘管有長文本和圖像的多個字段,其中一些可能會變得複雜。我可以使用彈出式模板嗎? –

+0

我已經放棄了與HTML模板的彈出窗口。網上太多的例子,只是不工作。猜猜我將不得不要求用戶點擊一個按鈕,並獲得傳統的模式。 –

回答

0

非常感謝傢伙 - 我一直在尋找這正是!

問題是,ng-mouseleave在錯誤的地方和錯誤的控制器。在模態控制器中,您需要專門創建一個函數來調用$ modalInstance.close()。

我把增加一個關閉按鈕的自由(所以有人可以故意關閉模型,如果他們想要的,但你可以刪除該鼠標離開肯定能行!)

var myApp = angular.module('myApp', ['ui.bootstrap']); 

myApp.controller('myCtrl', ['$modal', '$scope', '$log', 
    function ($modal, $scope, $log) { 
     $scope.option = { 
     name: 'Name (hover over for more details)', 
     longDescription: 'This is my detailed description... lots of text here' 
     } 
     $scope.showOptionDetails = function(option) { 
      $log.info($scope.option); 
      $scope.optionModal = $modal.open({ 
       template: '<div class="modal-header" ng-mouseleave="close()"><h3 class="modal-title">Option</h3></div><div class="modal-body">{{option.longDescription}}</div><div class="modal-footer" ng-click="close()">Close</div>', 
       controller: 'modalCtrl', 
       resolve: { 
        option: function() { 
         return $scope.option; 
        } 
       } 
      }); 
     } 

     $scope.closeOptionDetails = function() { 
      $scope.optionModal.close(); 
     } 
     } 
    ]); 

    myApp.controller('modalCtrl', [ 
    '$modalInstance', '$scope', '$log', 'option', function ($modalInstance, $scope, $log, option) { 
     $log.info(option); 
     $scope.option = option; 
     $scope.close = function() { 
      $modalInstance.close(); 
     } 
    } 
]); 

你可以看到它在這裏工作:http://plnkr.co/edit/3KiZdZsxwy6GDLoy6DhV?p=preview

+0

感謝您回答一個老問題。看起來不錯:) –

+0

最受歡迎!刷上角度的鼠標移動和範圍是很好的。我想我最好檢查一下角2將要修復什麼,然後打破... – brianlmerritt