指令控制器绑定中的隔离范围

时间:2014-09-26 04:29:36

标签: angularjs angularjs-directive angularjs-scope

问题

给出以下指令

angular.module('sandbox.directive.controllers', [])
.directive('simpleDirective', function() {
  return {
    restrict: 'E',
    replace: true,
    scope: {user: '='},
    controller: 'simpleController',
    templateUrl: 'directive-controllers/templates/simpleDirective.html'
  };
})
.controller('simpleController', function($scope, $element) {
  $scope.title = "Hello from the controller!";
});

为什么此测试失败?

it('should allow us update when we change the title', function() {
  element.scope().title = "Marco Polo!";
  element.scope().$digest();
  expect(element.html()).toContain('Marco Polo!');
});

我的完整实施可以是seen here和测试here

我的理解

我目前正在努力更好地了解指令范围。我写了一些测试,很清楚地说明了大多数用例。但是,我遇到的问题是指令控制器如何与隔离范围相关。

我的理解是控制器中可访问的范围是对范围指令的引用。

请帮忙

我理解基元上的双向绑定问题,但这是在隔离范围内而不是父范围。任何有助于更好地理解这一点的帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

似乎有一个element.isolateScope()属性。

为用户分配的双向绑定是在从element.scope()返回父作用域时传递的,因此当用户更改时,绑定有效并且值已在隔离范围内更新。

element.isolateScope()在隔离时(就像在这种情况下一样)返回范围,并允许我正确更新此值。

解释了element.scope()和element.isolateScope()函数here