Angularjs $http VS jquery $.ajax

Можно ли установить context в Angularjs $http так же, как мы можем это сделать в jQuery $.ajax?

define([
    'app'
], function(app) {

    app.controller("controller1", function($scope, $route, $http) {

        return $http({
            method: 'GET',
            url: 'server.php'
        }).then(function(response) {
            $scope.contacts = response.data;
        });
    });
});

Кроме того, в jQuery $.ajax есть больше обратных вызовов, например .done, .promise, которые я могу использовать для управления context, как показано ниже, интересно, могу ли я сделать то же самое в Angularjs

$.ajax({
    type:       "GET",
    dataType:   "HTML",
    url:        'server.php',
    context:    $("#container"),
    async:      true,
    beforeSend: function() {

        $(this).html('loading...');
    },
    success: function (returndata, status, jqxhr) {
        $(this).html(returndata).hide().fadeIn();
    },
    }).fail(function() { 
        alert("error"); 
    }).done(function(returndata) {
    },
    .always(function() { 
        alert("complete"); 
    }
});

Ответ 1

Оба одинаковы

$http ссылается от angular.js script

$. ajax ссылается на jquery script

  • и $http не поддерживает async:false

  • $. ajax поддерживает async:false

Вы можете сделать это, используя angular.js таким образом

$http.get('server.php').success(function(response) {
            $scope.contacts = response.data;
        }).error(function(error)
    {
//some code    
});

но async: true, не поддерживается в angular.js.

Если вам нужно остановить асинхронный обратный вызов, вы должны использовать $.ajax way

Подробнее см. в этом обсуждении: от jquery $.ajax до angular $http

Edit:

Как показать скрыть в angular js

<div ng-show="IsShow">xx</div>



  $http.get('server.php').success(function(response) {
                $scope.contacts = response.data;
                $scope.IsShow=true;
                $scope.$apply();
            }).error(function(error)
        {
           $scope.IsShow=false; 
           $scope.$apply(); 
    });

Ответ 2

Просто используйте Function.bind() для функции, которой вы передаете promise.then, чтобы поддерживать необходимый контекст. Например:

return $http({
    method: 'GET', 
    url:'server.php'
}).then(function(response) {
    $scope.contacts = response.data;
}.bind(this));

Тем не менее, я замечаю, что ваши обратные вызовы - все манипулирующие элементы - то, что вам не нужно делать в Angular. Есть ли что-то конкретное, что вы пытаетесь сделать, но неспособное с обратным вызовом?