Подтвердить что ты не робот

Вызов функции jQuery от контроллера AngularJS

У меня есть кнопка внизу, когда при нажатии отображается небольшое всплывающее окно, напоминающее

<button id="element" type="button" onclick="ShowNotifications()" class="btn btn-default" data-container="body" data-toggle="popover" data-placement="bottom" data-content="Text inside popup">Notifications</button>
<script type="text/javascript">
    function ShowNotifications() {
        $('#element').popover('open');
    }
</script>

Мое намерение состоит в том, чтобы показывать это всплывающее окно каждые несколько секунд, не нажимая кнопку, а из контроллера AngularJS.

 var showPop = function () {
    //how can i call that jQuery function here ??
    $timeout(showPop, 1000);
}
$timeout(showPop, 1000);

Пробовал с помощью приведенного ниже решения

app.directive("showNotifications", ["$interval", function ($interval) {
    return {
        restrict: "A",
        link: function(scope, elem, attrs) {          
            $interval(function () {
                $(elem).popover("open");
                alert('hi');
            }, 1000);
        }
    };
}]);

Также включены скрипты

<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" />
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>


<script src="js/app.js"></script>
<script src="js/postsService.js"></script>   
<script src="js/directive.js"></script>

<script src="js/controllers.js"></script>

используя эту директиву

<button id="element" type="button" class="btn btn-default" data-container="body" data-toggle="popover" data-placement="bottom" data-content="Friend request 1" **show-notifications**>Live Notifications</button>

Я вижу ошибку "объект не имеет метода popover"

4b9b3361

Ответ 1

Директивы используются для манипуляций с DOM:

<button show-notifications>

И директива

.directive("showNotifications", ["$interval", function($interval) {
    return {
        restrict: "A",
        link: function(scope, elem, attrs) {
            //On click
            $(elem).click(function() {
                $(this).popover("open");
            });

            //On interval
            $interval(function() {
                $(elem).popover("open");
            }, 1000);
        }
    }
}]);

Ответ 2

Следующие шаги могут быть выполнены,

var jq = $.noConflict();

затем создайте любой обычный модуль angular и контроллер и создайте функцию внутри контроллера, которую мы можем использовать для вызова любой функции jquery, например. Я хочу добавить класс в элемент div.

angular.module('myApp',[]).controller('hello',function($scope){
            $scope.name = 'Vikash';
            $scope.cities = ['Delhi','Bokaro','Bangalore'];

             $scope.hide = function(){
                jq('#hideme').addClass('hidden');   

            }
        });

и мы создадим некоторый регулярный html, чтобы использовать этот метод с контроллером.

<body ng-controller="hello">
    <div class="container" id="hideme">
        Hello Dear
    </div>
    <button ng-click="hide()">Hide Hello</button>
</body>

Теперь вы можете видеть, что мы говорим о вызове метода addClass из jQuery внутри функции, объявленной в контроллере, и части $scpe.

Ответ 3

Вместо $просто поместите ключевое слово angular

angular.element("#id").val()