我的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
,这真的会有所不同吗?我以为这两个可以互换使用......?
答案 0 :(得分:2)
不,你不能互相使用它们,$.ajax
是jQuery
而$http
是angular的http服务。
抵制使用jQuery的冲动,因为几乎总有一种方法可以用角度方式来实现。
话虽如此,如果你在角度世界之外做某些事情(主要是角度没有回调),你需要应用这些变化来强制digest
周期。
$.doSth(function callback() {
$scope.$apply(function () {
// your actual code
});
});
请阅读"Thinking in AngularJS" if I have a jQuery background?中投票最多的答案。这将指导您避免在有替代方法的情况下使用jQuery。