AngularJS指令控制器's的作用域可以从外部指令访问,为什么?
AngularJS directive controller's scope accessible from outside directive, why?
在实验中发现了一些有趣的东西。由于某种原因,我能够从指令外部访问指令声明中指定的控制器的作用域。
下面是示例代码:myApp.directive('lockToggle', function () {
return {
restrict: 'A',
link: function (scope, elem) {
elem.bind('click', function (e) {
scope.locked = !scope.locked;
scope.$apply();
});
},
controller: function ($scope) {
$scope.locked = false;
$scope.hello = function () {
alert('hello');
};
}
};
});
,这里是我的标记:
<button lock-toggle>
Toggle Lock
</button>
<button ng-disabled="locked" ng-click="hello()">
Click Me!
</button>
当我点击按钮Toggle Lock
, Click Me!
按钮禁用和启用正确。并且,当我点击Click Me!
按钮时,控制器范围上的hello()
方法被调用。
<!--Can't access the scope of MyController-->
<div ng-controller="MyController">
.
.
<!--CAN access the scope of MyController-->
.
.
</div>
<!--Can't access the scope of MyController-->
但是由于某种原因,这似乎不适用于我前面的例子。为什么会这样?
你可以决定你的指令作用域应该如何表现,以及它是否应该继承父作用域:
myApp.directive('lockToggle', function () {
return {
restrict: 'A',
scope: {}, // Will create an isolated scope
link: function (scope, elem) {
elem.bind('click', function (e) {
scope.locked = !scope.locked;
scope.$apply();
});
},
controller: function ($scope) {
$scope.locked = false;
$scope.hello = function () {
alert('hello');
};
}
};
});
目前,您没有指定scope
属性,它等于scope:false
。因此,该指令不创建作用域。
- 关于指令 的一个非常简洁的讲座
- 角文档
可以访问的原因是您将它添加到父控制器共享的相同作用域:
controller: function ($scope) {
$scope.locked = false;
$scope.hello = function () {
alert('hello');
};
}
这里$scope是你的父控制器,因为在JavaScript对象是通过引用,所以你添加它到你的父控制器。
如果你只想为指令作用域初始化变量,那么使用scope:
scope:{
//properties
}
相关文章:
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 如何从外部页面激活非默认引导选项卡
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 如何从外部url寻址数据
- 从外部函数渲染后更改ReactJS类的状态
- 使用ajax长轮询从外部API更新页面上的响应
- 在选择更改时更改从外部javascript生成的flash播放器
- 从外部js文件编辑现有的谷歌地图
- CkEditor复制/粘贴实现-从编辑器复制和从外部编辑器复制
- Javascript从外部站点获取html
- 如何在从外部连接时将外部文件包含到node-js项目中
- GWT:可以从外部JavaScript而不是JSNI调用Java方法吗
- AngularJs:是否可以从外部将值传递给控制器或指令
- 如何在 Angular 中从外部获得指令的价值
- 如何在指令中访问控制器(从外部文件)'
- 在angularjs中如何从外部指令触发主html页面中的弹出窗口
- 如何从外部解除在指令中创建的事件的绑定
- AngularJS指令控制器's的作用域可以从外部指令访问,为什么?
- 如何从外部触发指令模板中的元素
- 从外部访问表单验证指令