分层Angularjs指令不检索范围变量

时间:2013-08-08 22:08:48

标签: angularjs angularjs-directive angularjs-scope

我正在构建一个AngularJS应用程序。我使用三个指令来构建菜单。标题位于i18n文件中,因此大多数属性都是angularjs表达式。以下是指令的结构摘要:

<navbar title="{{ LABELS.HOME }}" inverse="true">
  <mainmenu>
    <menu-item name="system" title="{{ LABELS.SYSTEM }}">
      <submenu name="users" title="{{ LABELS.USERS }}"></submenu>
    </menu-item>
  </mainmenu>
</navbar>

问题在于指令的代码。在controller函数中(甚至在link函数上),我尝试检索titlename属性,但它们始终显示为undefined值,即使我做console.dir($scope)我可以看到属性,

您可以查看代码here

的代码段

1 个答案:

答案 0 :(得分:0)

我要在这里采取疯狂刺,因为你没有提供任何代码,但是这些是否在ng-repeat内使用?

如果是这样,那么问题是链接函数实际上被称为之前将值应用于范围。这是因为ng-repeat只会为整个循环执行一次链接,然后重复节点,每个节点都应用了正确的$scope

您可以在控制台中看到值的原因是,在链接功能运行后,范围对象会更新,但 后,控制台会将其输出。

这导致你有类似这样的情况:

$scope == {};
link();
    console.log($scope); // stores reference to be rendered
$scope.foo = 'bar';
renderConsoleOutput();

如果您无法使用标准绑定(例如,$parent.LABELS.SYSTEM或类似的东西)修复它,您可以将对象访问权限包装在方法中,然后绑定该方法:

// in menu-item directive:
$scope.getLabels = function() { return $scope.LABELS; }
// in menu-item template:
<menu-item title="{{ getLabels().SYSTEM }}">