当范围:{}在指令中定义时,无法在控制器中绑定$ scope

时间:2016-04-02 17:27:59

标签: javascript angularjs

当我在指令的控制器中绑定$scope而不在指令设置中使用scope: {}时,它可以正常工作。

但是我需要scope: {}来获取指令中的已定义变量。

这是我的测试代码:

var app = angular.module("app", []);

app.directive("directive", function () {
  return {
    controller: function($scope){
      $scope.id = 5;
    }
  }
});

app.directive("childDirective", function () {
  return {
    scope: {
      id: "=user"
    },
    controller: function($scope){
      $scope.hello = "Hello";
    }
  }
})

-

<html ng-app="app">

<directive>
  <child-directive user="id">
     {{ hello }}
  </child-directive>
</directive>

</html>

http://codepen.io/anon/pen/MyEXJV

当我删除scope: { id: "=user" }时,它有效。但我需要将id传递给控制器​​。

有解决方法吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

使用隔离范围时,它仅在为指令提供的模板上有效。您可以将模板提供为字符串或templateUrl

尝试这种方式:

<directive>
  <child-directive user="id"></child-directive>
</directive>

JS

app.directive("childDirective", function () {
  return {
    scope: {
      id: "=user"
    },        
    template:'{{ hello }} ID= {{id}}',
    controller: function($scope){
      $scope.hello = "Hello";
    }
  }
})