控制器和服务之间的Angularjs数据绑定

时间:2015-02-07 00:19:04

标签: angularjs

我无法获得控制器和服务之间的数据绑定。 我有一个控制器和一个进行HTTP调用的工厂。我希望能够从其他服务调用工厂方法,并看到控制器属性得到更新。我尝试了不同的选择,但似乎没有一个工作。任何想法都将不胜感激。

请参阅此处的代码:

http://plnkr.co/edit/d3c16z?p=preview

这是javascript代码。

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';
});

app.controller('EventDetailCtrl', ['$http', 'EventDetailSvc', '$scope',
    function ($http, EventDetailSvc, $scope) {

      this.event = EventDetailSvc.event;

      EventDetailSvc.getEvent();
      console.log(self.event);

      $scope.$watch(angular.bind(this, function () {
        console.log('under watch');
        console.log(this.event);
        return this.event;

      }), function (newVal, oldVal) {
        console.log('under watch2');
        console.log(newVal);
        this.event = newVal;
      });

    }])

  .factory('EventDetailSvc', ['$http', function ($http) {

    var event = {};
    var factory =  {};

    factory.getEvent =  function() {
      $http.get('http://ip.jsontest.com')
        .then(function (response) {
          this.event = response.data;
          console.log('http successful');
          console.log(this.event);
          return this.event;

        }, function (errResponse) {
          console.error("error while retrieving event");
        })
    };

   factory.event = event;

   return factory;

  }]);

1 个答案:

答案 0 :(得分:0)

在我看来,您已将事件对象嵌套在工厂对象中。你应该直接返回事件而不是用工厂包装它。现在你需要调用EventDetailSvc.factory.event来访问你的对象。