$ location不会在第一次ng-click回调中导航

时间:2013-03-10 10:59:55

标签: javascript angularjs angularjs-routing

我的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);
                }
            }
        });
    }   

url var每次都被初始化为正确的值。但是,当我第一次点击锚标签时,$location.path(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$http,这真的会有所不同吗?我以为这两个可以互换使用......?

1 个答案:

答案 0 :(得分:2)

不,你不能互相使用它们,$.ajaxjQuery$http是angular的http服务。

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

话虽如此,如果你在角度世界之外做某些事情(主要是角度没有回调),你需要应用这些变化来强制digest周期。

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

请阅读"Thinking in AngularJS" if I have a jQuery background?中投票最多的答案。这将指导您避免在有替代方法的情况下使用jQuery。