AngularJS:如何在不通过多个$ parent导航的情况下访问最顶层的范围?

时间:2014-12-24 14:40:13

标签: javascript angularjs angularjs-scope

我知道这有很多问题,但我找不到他的答案 我的弹出窗口有一个指令,有很多模板,

HTML

<popup template="popupTemplate"></popup>

指令

app.directive('popup', function () {
  return {
    restrict: 'E',
    scope: {
      template: '='
    },
    link: function ($scope, $element, $attrs) {
      // do something on $scope.template
    }
  }
});

现在在另一个元素上我定义了目标弹出窗口的模板名称

<button popup-template="upload-avatar"></button>

指令

app.directive('popupTemplate', function () {
  return {
    link: function ($scope, $element, $attrs) {
      $element.bind('click', function () {
        $scope.$parent.popupTemplate = $attrs.popupTemplate;
        $scope.$apply();
      });
    }
  }
});

问题:
当我点击嵌套指令中的元素时。因为我需要处理:

$scope.$parent.popupTemplate
$scope.$parent.$parent.popupTemplate

这不是一个好主意。 我需要知道如何使用唯一语法而不是多个$ parent来访问第一个父作用域。

1 个答案:

答案 0 :(得分:3)

只需打包popupTemplate

<popup template="whatever.popupTemplate"></popup>

然后你可以:

$scope.whatever.popupTemplate = $attrs.popupTemplate;

根本没有$ parent。

让我们说你有父范围A和孩子B.默认情况下,B复制A中的所有值。这里的复制意味着应对指针。

比较java:

void bad(String s) {
    s = "new";
}

void good(String[] s) {
    s[0] = "new";
}