【发布时间】:2016-09-19 19:01:12
【问题描述】:
我正在尝试学习在 AngularJS 中构建自定义指令。目前我正在使用 AngularJS 1.5.8。
我正在尝试创建一个具有隔离范围的指令示例,其中控制器范围不可见,以便我可以通过将它们添加到“范围:{}”来选择性地公开它们。在此示例中,我期望 得到的是“名称:街道:”,因为 ctrl.customer 应该对指令不可用。然后稍后我将“客户:'='”添加到“范围:{}”,我会得到“名称:大卫街:123 任何街道”。不幸的是,我从这个指令中得到了“名称:大卫街:123 任何街道”。
我尝试过的事情:
- 设置“bindToController: true”
- 删除“范围:{}”并设置“bindToController:{}”(因此我添加了“客户:'='”)
- 设置“bindToController: false”(也可以,对吗?)
- 加载 html 后反复按 shift-F5,因此请确保我没有缓存旧文件。
testScope.js:
var app = angular.module('scopeModule',[]);
app.controller('Controller',[function(){
var vm = this;
vm.customer = {
name: 'David',
street: '123 anywhere street'
};
}]);
app.directive('sharedScope', function() {
return{
scope:{},
template: 'Name:{{ctrl.customer.name}} Street:{{ctrl.customer.street}}',
controller: 'Controller',
controllerAs: 'ctrl',
bindToController: true
};
});
index2.html:
<!doctype html>
<html ng-app="scopeModule">
<body>
<shared-scope></shared-scope>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<script src="testScope.js"></script>
</body>
</html>
【问题讨论】:
-
你错了。隔离范围的重点是确保指令范围与外部范围隔离,即使用指令的视图范围。如果一个指令有自己的controllerAs,并且控制器暴露了数据,那么指令当然可以访问这些数据。
-
或者说这个指令有点不同,控制器是它的作用域,所以无论你放什么东西都可以立即访问
标签: angularjs angularjs-directive angularjs-scope