我是AngularJS的新手(与v.1.2.27一起玩)。我是这样一个简单的控制器(html在头部包含.js文件......呃!):
'use strict';
var sample = angular.module('ding', []);
sample.controller('sampleCtrl',function($scope,$http){
$scope.testme = "sdsds";
$http.get('/get/me/some/data').
success(function(data, status, headers, config) {
$scope.datayouwant = data;
}).
error(function(data, status, headers, config) {
});
});
AJAX调用" / get / me / data"工作,并没有需要JSONP的东西来完成这项工作。现在有一个明显/简单的HTML这样的:
<dt ng-controller='sampleCtrl'>United States</dt>
<dd>{{ testme }}</dd>
表达式testme或{{datayouwant}}不会产生任何结果。我只需要在这里显示来自AJAX调用的值(一种单向数据绑定)。我为何不起作用感到困惑和茫然。我测试了chrome和FF(两个最新版本)。我读了一些关于$ scope。$ apply()的东西,但也读到$ http隐含地有那个调用,甚至试图包括但是FF / chrome大声抱怨......
请帮帮我。
答案 0 :(得分:3)
您的控制器也需要包装dd
,因为它需要来自控制器的范围绑定。目前它仅适用于dt
,因为您在dt
上有ng-controller指令。
试着举例:
<dl ng-controller='sampleCtrl'>
<dt >United States</dt>
<dd>{{ testme }}</dd>
</dl>
因此,拇指规则是当您对任何元素使用ng-controller指令时,只有该元素和该元素内的任何内容(隔离范围指令除外)将直接或间接访问控制器范围(原型继承)。在你的情况下,angular会从testme
的可用范围评估dd
的值,如果没有其他控制器包装它们,它将根据$rootScope
进行评估,并且不会显示任何内容如果该范围内该属性的值不可用。
是的,你是对的,在http回调运行后你不需要执行$scope.$apply()
。内部角度将触发摘要周期。
工作代码
var sample = angular.module('ding', []);
sample.controller('sampleCtrl', function($scope, $http) {
$scope.testme = "sdsds";
$http.get('/get/me/some/data').
success(function(data, status, headers, config) {
$scope.datayouwant = data;
}).
error(function(data, status, headers, config) {});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="ding">
<dl ng-controller='sampleCtrl'>
<dt>United States</dt>
<dd>{{ testme }}</dd>
</dl>
</div>
&#13;