Angular - 如何使用$ emit?

时间:2015-05-25 06:42:47

标签: javascript angularjs

当我在html中调用{{callData}}时,$scope.callData的结果无法正常工作。 也许我的代码错了? 请帮我解决一下



 phonecatControllers.controller('PhoneListCtrl', 
  ['$scope', 'Phone', function($scope, Phone){
    $scope.phones = Phone.query();

  $scope.sortir = 'age';
  $scope.getCount = function(){
    return $scope.phones.length;
  };
  $scope.$emit('showData', {
    showData: $scope.getCount
  });
  }]);

  phonecatControllers.controller('PhoneDetailCtrl', ['$scope', '$routeParams', 'Phone',
  function($scope, $routeParams, Phone) {
      $scope.phone = Phone.get({phoneId: $routeParams.phoneId}, function(phone) {
       $scope.mainImageUrl = phone.images[0];
    });

  $scope.setImage = function(imageUrl) {
    $scope.mainImageUrl = imageUrl;
  }
  }]);

  phonecatControllers.controller('JumlahCtrl', ['$scope',
  function($scope) {

    $scope.$on('showData', function(event, obj){

        console.log(obj);
        $scope.callData = function(event){
          obj.showData();
        };
  })
  }]);

<div>
  <span>jumlah : {{callData()}} </span>
</div>
&#13;
&#13;
&#13;

为什么$scope.callData的结果无法弹出

2 个答案:

答案 0 :(得分:1)

$scope仅限于自己的控制器。您需要在$rootScope级别发出。尝试更改

$scope.$emit('showData', {
   showData: $scope.getCount
});

$rootScope.$broadcast('showData', {
   showData: $scope.getCount
});

答案 1 :(得分:0)

如果可以,我会对这个问题发表评论,但在您发布的示例中,您没有在div上声明任何ng-controller指令。所以html根本不知道任何角度函数。

<div ng-controller="MyCtrl">
    <span>jumlah : {{callData()}} </span>
</div>
var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
    $scope.callData = function() {
        return 123;
    }
}

这是一个小jsFiddle来演示:http://jsfiddle.net/5uu2cq6j/