我正在使用Django作为后端的Web应用程序上的朋友,使用AngularJS作为前端,以及使用Django REST Framework编写的API供前端使用。
我们不打算在单页应用程序上使用完整版,但在每个页面中我们的目标是获得很多响应性 - 因此Angular + API。问题是在我们的主模板上,调用基本的Angular控制器来从API端点获取一些数据工作正常。如果依赖于控制器的相同代码被移动到主模板上的链接访问的单独模板,则它不再起作用。这是控制器:
var matchupApp = angular.module('matchupApp', []).config(function ($interpolateProvider) {
$interpolateProvider.startSymbol('{[{').endSymbol('}]}');
})
matchupApp.controller("MatchupsCtrl", function ($http, $scope) {
console.log('Hello');
var league = 'test';
var week = '1';
$http.get(<api url>/?format=json).
success(function (data, status, headers, config) {
$scope.player1 = data[0];
console.log($scope.player1);
$scope.player2 = data[1];
console.log($scope.player2);
$http.get(<api url>/?format=json).
success(function (picks, status, headers, config) {
$scope.pickData = picks;
console.log($scope.pickData);
})
}).
error(function (data, status, headers, config) {
// log error
});
});
这两个模板代表用户在登录时看到的仪表板,以及显示匹配的页面 - 显示在一起的2个用户数据。我删除了模板代码,因为我不认为它与此问题相关,但我可以重新添加,如果有人想看到它 - 唯一的区别是匹配模板实际上是一个大的<div>
所以它可以无需重新加载主导航栏即可加载。
触及API端点的代码在仪表板模板上运行正常,但在匹配模板上根本不起作用。
如果我插入一个基本的Hello World文本框,即使这对匹配模板也不起作用:
<input type="text" ng-model="sometext" />
<h1 ng-show="sometext">Hello {[{ sometext }]}</h1>
我只看到下面有Hello {[{ sometext }]}
的文本框。
相关网址条目:
urlpatterns = patterns('',
...
url(r'^dashboard', 'app.views.dashboard', name='dashboard'),
url(r'^matchups2', 'app.views.matchups2', name='matchups2'),
...
以及调用每个人的基本视图:
def dashboard(request):
assert isinstance(request, HttpRequest)
return render(
request,
'app/dashboard.html',
context_instance = RequestContext(request,
{
'title':'Dashboard',
'year':datetime.now().year,
})
)
def matchups2(request):
assert isinstance(request, HttpRequest)
return render(
request,
'app/matchups2.html',
context_instance = RequestContext(request,
{
'title':'Matchups',
'year':datetime.now().year,
})
)
Angular控制器调用API可能在一个页面而不是另一个页面上工作的原因是什么?甚至hello world文本框在matchup模板上都不起作用这一事实让我觉得在更深层次上发生了一些事情 - 我的预感是它与Django和Angular如何在请求第二个模板时进行交互有关。
我的朋友和我一直在研究这个问题 - 我们发现one question看起来像是确切的问题,但我不相信CORS适用,因为所有内容都在同一个域上,并且无论如何都没有接受的答案。