如果使用此语法:<div ng-controller="BuildingsCtrl as bc">
的目的是避免使用$scope
(显然是it is),那么我应该如何使用$http
?
也就是说,如何重新编写以下代码以不使用$ scope?
angular.module('atlasAngularApp')
.controller('BuildingsCtrl', function ($scope, $http) {
this.awesomeThings = [
'HTML5 Boilerplate',
'AngularJS',
'Karma'
];
this.getBuildings = function () {
$http.get('http://localhost:40602/api/1.0/buildings')
.then(function successCallaback(response) {
======> $scope.buildings = response.data;
}, function errorCallback(response) {
alert("Error");
}
);
}
});
为了详细一点,
<li ng-repeat="thing in bc.awesomeThings">
{{ thing }}
</li>
this.awesomeThings
可以正常使用,因此视图可以使用this
,但是以下操作无效:angular.module('atlasAngularApp')
.controller('BuildingsCtrl', function ($http) {
var self = this;
this.getBuildings = function () {
$http.get('http://localhost:40602/api/1.0/buildings')
.then(function successCallaback(response) {
======> self.buildings = response.data;
}, function errorCallback(response) {
alert("Error");
}
);
}
});
(注意
self.buildings
位。)我已经按照这些主题尝试了多种变体,但到目前为止没有任何效果。 This问题与此类似,但是我无法使其适应我的代码。
我可能应该补充一点,我没有反对
$scope
的任何东西,我只是在尝试做一些由yeoman生成的angular认可的方式。我还想解释一下为什么$scope
可能被认为是一件坏事。为了完整起见,这是我的观点。也许有什么问题吗?
<div ng-controller="BuildingsCtrl as bc">
<table ng-init="buildings = bc.getBuildings()">
<tr ng-repeat="building in buildings">
<td>{{ building.name }}</td>
<td>{{ building.code }}</td>
<td>{{ building.image }}</td>
</tr>
</table>
</div>
只要我使用
$scope
,代码就可以工作 最佳答案
您正在创建ng-init="buildings = bc.getBuildings()"
,但未返回任何内容绑定到buildings
,而是将值间接分配给self.buildings
。因此,您对this.buildings
的重复无效。现在,当您分配给buildings
时,this.buildings
就是您在视图中实际引用的内容。
所以,
<tr ng-repeat="building in bc.buildings">
重复您的元素。
至于使用
bc.buildings
和$scope
的答案。没有比这里更好的解释了:'this' vs $scope in AngularJS controllers