0

我的 AngularJS 应用程序中发生了一些奇怪的事情。我有一个视图,其中有一个绑定到对象数组的锚标记列表(我ng-repeat用来呈现列表)。每个锚标记都ng-click绑定到控制器上的方法。方法如下:

    $scope.onSiteSelected = function ($event, site) {
        $event.preventDefault();
        $.ajax({
            url: '/Site/GetSiteMap/' + site.Id,
            success: function (response) {
                if (response && response.length > 0) {
                    menuManager.setSiteMap($scope.$root.menu, response[0]);
                    var url = response[0].Children[0].Settings.Url;
                    $location.path(url);
                }
            }
        });
    }   

urlvar 每次都被初始化为正确的值。但是,当我第一次单击锚标记时,$location.path(url)什么也不做,当我第二次单击它时,它确实导航到目标 URL。

更新:

好的,我通过使用以下$http服务使其正常工作:

    $scope.onSiteSelected = function ($event, site) {
        $event.preventDefault();
        var address = '/Site/GetSiteMap/' + site.Id;
        $http.get(address)
            .success(function (response) {
                if (response && response.length > 0) {
                    menuManager.setSiteMap($scope.$root.menu, response[0]);
                    var url = response[0].Children[2].Settings.Url;
                    $location.path(url);
                }
            });
    }

$,ajax如果我使用or真的有什么不同$http吗?我以为这两者可以互换使用...?

4

1 回答 1

2

不,您不能互换使用它们,$.ajaxjQueryAngular$http的 http 服务是。

抵制使用 jQuery 的冲动,因为几乎总有一种方法可以以有角度的方式进行。

话虽这么说,如果您在 Angular 世界之外做了一些事情(大多数回调不是从 Angular 发生的),您需要应用更改来强制digest循环。

$.doSth(function callback() {
    $scope.$apply(function () {
        // your actual code
    });
}); 

如果我有 jQuery 背景,请阅读“Thinking in AngularJS”中投票最多的答案?. 这将指导您避免在有替代方案的情况下使用 jQuery。

于 2013-03-10T12:35:13.060 回答