将控制器与角度范围对象明确关联

时间:2014-01-31 13:02:51

标签: javascript angularjs scope

来自AngularJS文档 Understanding controllers

  

将控制器与角度范围对象关联

     

您可以通过隐式方式将控制器与范围对象关联    ngController指令 $ route service

这两种方法是众所周知的,主要用于AngurlaJS应用程序。

引起我的注意的是 Developer Guide / Understanding the Controller Component 中的这部分:

  

将控制器与角度范围对象关联

     

您可以通过显式关联控制器与范围对象   范围。$ new api或隐式通过 ngController指令 $ route   服务

因此,除了Controller与范围的隐式关联之外,还通过使用范围提及了明确的方式。$ new api。

我知道范围。$ new 用于创建新的[隔离]范围,但我不明白它究竟与控制器与范围的显式关联有何关联。

看到一些实际用例和/或更详细的解释会很棒。

1 个答案:

答案 0 :(得分:2)

它主要在测试期间用于直接构建控制器并使用它执行某些操作。

您可以使用$controller服务执行此操作:

var scope = $rootScope.$new();
var ctrl = $controller(MyAwesomeController, { $scope: scope });

现在我可以直接操作scope变量并检查副作用:

scope.foo = 'bar'
scope.$digest();

expect(scope.bar).toBe('YEAH BABY!!!');

$controller服务将实例化一个控制器,并按照您的预期注入所有依赖项。 它还允许您传入本地的哈希值,这些哈希值将使用您明确提供的内容覆盖任何依赖项。

同样,这对于测试非常有用,因为如果需要,您可以使用模拟交换服务。