AngularJS指令绑定
AngularJS Directive Binding
我一直试图影响父范围内的变量从指令内部切换ng-show。该指令是一个包含ng-repeat指令的自定义指令。这个想法是,一旦ng-repeat完成,我想隐藏包含div的元素以及它里面的元素。
这是一个普朗克演示我的情况:http://beta.plnkr.co/edit/C42Z25?p=preview这里还有一个JSFiddle中的比较,它使用相同的问题,但它不是ng-repeat,所以它可以工作:http://jsfiddle.net/dyzPC/
所以有几个问题。在我的指令中,我必须使用scope.$parent.showMe = true
来改变父范围的showMe
,我似乎不能只是使用scope.showMe = true
来设置它。我试过孤立作用域,没有作用域,真正的作用域,似乎都不起作用。
此外,在一个jquery回调函数,我似乎不能重置父范围showMe作为scope.$parent.showMe = false
。这可以防止我在有内容时显示包含它的div,而在没有内容时隐藏它。
另外,最后一个问题是$last
的使用。在plunkr示例中,可以使用$last,但在我的实际代码中,ng-repeat集合是由HTTP响应拦截器填充的。这似乎阻止了$last的使用,因为所有的元素最终都是$last = true
。是否有另一种方法来检测ng重复何时结束?
在你的指令中,你需要在scope.$apply()
中包装scope.$parent.showMe = false;
:
scope.$parent.showMe = true; //this one works
element.hide().fadeIn('fast').delay(2000).fadeOut('slow', function(){
scope.$apply(function(){
scope.$parent.showMe = false;
});
});
这是因为你在Angular之外改变了一个Angular属性的值(你的jQuery函数),所以Angular不知道scope.showMe
已经改变了。
你的指令与你的ngRepeat
在同一个标签中,你不能使用一个孤立的作用域,因为它会删除你的ng-repeat="httpMessage in messages"
的绑定。换句话说,如果在这里隔离作用域,httpMessages
将不存在。
我会将隐藏/显示逻辑和ng-repeat移到指令中,然后让控制器通过指令的属性向指令提供消息列表。
app.directive("hideShow", function() {
return {
restrict: 'E',
template:
"<div ng:repeat='message in messages'>" +
" <em>{{message.message}}</em> " +
"</div>",
scope: {
messages: "="
},
link: function(scope, element, attrs) {
element.hide();
scope.$watch("messages", function() {
element.fadeIn('fast').delay(1000).fadeOut('slow');
});
}
};
});
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- AngularJS指令只识别双向绑定类型
- 在指令中绑定方法
- 将指令绑定到控制器属性
- NG-重复中断指令模型绑定
- 将click事件绑定到AngularJS指令中的子元素
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- 角度指令双向绑定不起作用
- 指令中选择输入的双向绑定不起作用
- 将回调绑定到没有隔离作用域的指令
- 使用 Angular 和 UI-bootstrap 对模态事件绑定无法工作的指令
- 无法绑定到没有指令 + angularjs 标识符的控制器
- 如何将函数绑定到使用链接函数创建 HTML 的角度指令
- Angularjs 绑定 2 指令将模型范围限定为父控制器模型
- 2路数据绑定指令角度
- 通过公共属性绑定指令实例
- 在测试期间更改了单向绑定指令属性,没有更新指令范围
- 如何在angular中使用数据绑定指令来包装元素
- 用AngularJS绑定指令
- 2方式绑定指令与弹出窗口/点击