AngularJS: 如何将数据从服务传送到控制器?

AngularJS: How do I communicate data from a service to a controller?

我是 AngularJS 的新手,对 JavaScript 不是很熟悉。我正在尝试使用 AngularJS v1.3.15.

制作一个简单的应用程序

我有这个控制器:

var app = angular.module('game', [])
app.controller('SimpleController', ['market_data', function(market_data) {

    this.city_name = "City";
    market_data.success(function(data) {
        console.log(data.city_name);
        this.city_name = data.city_name;
    });
}]);

而这个观点:

<div ng-controller="SimpleController as simple" >
  <h1>Hello {{simple.city_name}}!</h1>
</div>

默认的城市名称行没有变化:City

据我所知,服务 market_data 似乎运行良好。我对 console.log 的调用打印出我希望服务返回的字符串。因此,data.city_name 包含正确的信息,但 this.city_name 不更新控制器。

将此数据导入控制器以显示在我的视图中的最佳方法是什么?

而不是使用 this,您必须将城市的值保存在 $scope 中。像这样

app.controller('SimpleController', ['$scope', 'market_data', function($scope, market_data) {
    $scope.city_name = "City";
    market_data.success(function(data) {
        console.log(data.city_name);
        $scope.city_name = data.city_name;
    });
 }]);

使用此代码:

var app = angular.module('game', [])
app.controller('SimpleController', ['market_data', function(market_data) {

    $scope.city_name = "City";
    market_data.success(function(data) {
        console.log(data.city_name);
        $scope.city_name = data.city_name;
    });
}]);



<div ng-controller="SimpleController" >
  <h1>Hello {{simple.city_name}}!</h1>
</div>

this 使用局部变量。 vm(viewmodel)常用。

var app = angular.module('game', [])
app.controller('SimpleController', ['market_data', function(market_data) {

    var vm = this;
    vm.city_name = "City";

    market_data.success(function(data) {
        console.log(data.city_name);
        vm.city_name = data.city_name;
    });
}]);