从指令链接传递范围变量
passing scope variable from directive link
我做了一个angularjs指令,如下所示:
angular.module('myApp')
.driective('myDirective', function(){
return {
templateUrl: 'directive.html',
restrict: 'E',
scope: {
'dirObj': '=object'
},
link: function (scope, element, attrs) {
scope.message = "View Message";
element.bind('mouseenter', function(){
scope.overState = true;
console.log('enter');
});
element.bind('mouseleave', function(){
scope.overState = false;
console.log('leave');
});
}
};
});
和内部指令.html:
<h1>{{ message }}</h1>
<div ng-show="overState">This text doesn't appear!!!</div>
这是 plunkr 上的实时代码
问题是元素内部的作用域.bin没有设置变量"overState"的值,有人可以解释为什么会发生这种情况以及如何解决它。
你需要使用$scope.$apply
:
scope.$apply(function() {
scope.overState = true;
});
Angular 会自动包装其大部分内置指令,因此它将通过摘要循环进行更新,但是如果您绑定自己的事件(即 mouseenter
和mouseleave
(你需要自己启动摘要循环。
更新的 Plnkr
根据以下评论进行更新
您还可以使用内置的角度指令ng-mouseenter
和ng-mouseleave
,然后您无需担心自己计算角度表达式。
<div class="directive-area"
ng-mouseleave="overState = false"
ng-mouseenter="overState = true">
<h1>{{ message }}</h1>
<div ng-show="overState">Test Text</div>
</div>
内置指令 Plnkr
相关文章:
- ngDialog-弹出窗口未更新范围变量
- AngularJS范围变量Unwatch
- 将外部控制器的范围变量设置为角度
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- 如何使用EnquireJS使AngularJS范围变量依赖于媒体查询
- 具有范围变量的控制器不工作
- 范围变量返回长度错误
- 将 NodeJS 模块范围变量作为对象访问
- Angularjs 更新 setTimeout 中的范围变量不起作用
- 递归承诺调用 - 内存范围变量问题
- AngularJS:从指令设置范围变量
- Angularjs:访问范围变量数组并计算平均值
- 范围变量更新,但不更新视图
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 如何在编辑范围变量时(暂时)避免摘要循环
- 防止Angular范围变量通过引用自动绑定到服务私有成员
- 使用 AngularJS 从指令设置范围变量
- 集合回调忽略范围变量
- 使用forEach修改角度范围变量
- 因果报应测试中未定义的预期范围变量