AngularJS:从子指令设置父控制器$ scope变量

时间:2014-10-05 17:32:27

标签: javascript angularjs scope directive

我有一个主控制器 EventCtrl ,它在其范围内设置 formData 变量。

此控制器有一个 setEventObject 方法,该方法会覆盖 formData 对象。

我的目的是能够从子指令调用此方法,并递归地将新变量值应用于每个范围。

这是控制器及其 setEventObject 函数:

app.controller('EventCtrl', function($scope) {
  $scope.formData = {
    id: 1,
    name: 'tennis lesson'
  }
  $scope.events = [
    {id: 1, name: 'tennis lesson'}, 
    {id: 2, name: 'golf lesson'}, 
    {id: 3, name: 'handball lesson'}
  ];

  this.setEventObject = function(eventId) {
    angular.forEach($scope.events, function(elem) {
      if (elem.id == eventId) {
        $scope.formData = {
          id: elem.id,
          name: elem.name
        };
      }
    });
  }
});

以下是关联的Plunkr,点击链接时,应设置表单输入并重置 formData 变量。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您正在使用element.bind('click'收听点击。这是jQuery,这些变化是在角度世界之外。你需要对你的变化有所了解。

替换eventCtrl.setEventObject(scope.event.id);
scope.$apply(function () {
    eventCtrl.setEventObject(scope.event.id);
});

我在您的plunker中尝试了上述更改,它按预期工作。