我是 AngularJS 的新手(使用 v.1.2.27)。我有一个像这样的简单 Controller (html 在其头部部分包含 .js 文件..duh!):
'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) {
});
});
对“/get/me/data”的 AJAX 调用有效,不需要 JSONP 的东西来完成这项工作。现在有一段像这样的明显/简单的 html:
<dt ng-controller='sampleCtrl'>United States</dt>
<dd>{{ testme }}</dd>
表达式 testme 或 {{ datayouwant }} 不产生任何结果。我只需要在此处显示来自 AJAX 调用的值(一种单向数据绑定(bind))。我对为什么它不起作用感到困惑和茫然。我在 chrome 和 FF(都是最新版本)中进行了测试。我读了一些关于 $scope.$apply() 的东西,但也读到 $http 隐含地有那个电话,甚至试图包括但 FF/chrome 大声提示......
请帮帮我。
最佳答案
您的 Controller 也需要包装 dd
,因为这需要来自 Controller 的范围绑定(bind)。目前它仅适用于 dt
,因为您在 dt
上有 ng-controller 指令。
例如尝试:
<dl ng-controller='sampleCtrl'>
<dt >United States</dt>
<dd>{{ testme }}</dd>
</dl>
所以经验法则是,当您在任何元素上使用 ng-controller 指令时,只有该元素和该元素内的任何内容(独立范围指令除外)将直接或间接访问 Controller 范围(原型(prototype)继承)。在您的情况下, Angular 会从 dd
的可用范围评估 testme
的值,如果没有其他 Controller 包装它们,它将针对 $rootScope 进行评估
如果该范围内该属性的值不可用,则不会显示任何内容。
是的,你是对的,你不需要在运行 http 回调后执行 $scope.$apply()
。 Angular 内部会触发摘要循环。
工作代码
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) {});
});
<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>
关于javascript - 是$http吗?是 $scope.$apply 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28018188/