阻止控制器创建新的范围对象

时间:2015-03-20 15:03:54

标签: javascript angularjs

我将自定义范围对象传递给$compile并创建自定义模板。如果我对模板中的元素应用指令,那么正在改变的范围就是传递给$compile的范围,而这正是我想要的。 但是,我只是认为在模板中的某些元素上设置控制器可能会很好,

<div ng-controller="controllerName" >
</div>

但ng-controller不会在传递的范围上设置数据,而是创建自己的范围并使用该范围。有没有办法让ngController使用现有范围而不是创建一个新范围?

2 个答案:

答案 0 :(得分:1)

我们创建控制器并将它们包装在工厂中以使其可访问。我们通过指令申请或控制(也会离开)。这为您提供了一个控制器,该控制器的范围是指令,它可以更好地控制范围,这适用于我们,因为我们执行此操作的指令通常是组件。

鉴于你现在的道路,我不知道这是不是一个选择。我建议尝试停止使用ng-controller。你现在可能想看看角度2只是为了记住它作为一个迁移路径,它将在不久的将来出现。他们已经删除了ng-controller,他们现在可以在角度2中做很多事情。

这是一个很好的资源,说明为什么这些事情是个坏主意

https://www.youtube.com/watch?v=gNmWybAyBHI&t=9m10s

答案 1 :(得分:0)

如果你看一下source code for ng-controller,你会发现它非常简单:

var ngControllerDirective = [function() {
  return {
    restrict: 'A',
    scope: true,
    controller: '@',
    priority: 500
  };
}];

您实际上可以创建一个几乎完全相同的备用指令,它只定义scope: false(或完全省略scope键,同样的事情):

app.directive('controllerNoScope', function () {
  return {
    restrict: 'A',
    scope: false,
    controller: '@',
    priority: 500 // same as ng-controller
  }
});

你可能想给它一个更好的名字)。

请参阅this Plunkr以获得一个演示,该演示显示示波器与外部示波器具有相同的$id,这意味着示波器的范围相同。