角度布尔属性未在指令外部更新
Angular boolean property is not updating outside directive
我做了一个简化的问题片段。实际上我正在使用ionic做一个应用程序,但没关系,问题也发生在plunker中。
我也阅读了这个答案并更新了一些代码,但问题仍然存在。
我有一个object
的控制器:
app.controller('myCtrl', function($scope) {
$scope.object = {
boolean: true,
btn1: 'Do it be TRUE',
btn2: 'Do it be FALSE'
}
})
我想在此指令中更改其boolean
属性:
.directive('myDirective', function() {
return {
template: '<button class="btn btn-default">{{$obj.btn1}}</button>'
+ ' <button class="btn btn-default">{{$obj.btn2}}</button>',
restrict: 'A',
scope: { $obj: '=myDirective' },
link: function(scope, element, attrs) {
var listener = scope.$watch('$obj', function() {
if (scope.$obj) listener();
else return;
var buttons = element.find('button'),
btn1 = buttons.first(),
btn2 = buttons.last();
if(scope.$obj.boolean){
btn1.addClass('selected');
$('#Log').html('true');
}else {
btn2.addClass('selected');
$('#Log').html('false');
}
buttons.on('click', function(){
buttons.removeClass('selected');
$(this).addClass('selected');
var isTrue = this === btn1[0];
$('#Log').html(String(isTrue)); // works
scope.$obj.boolean = isTrue; // does not works
});
});
}
}
});
正如您在运行 plunker 时所看到的,角度日志不会像 jQuery 那样更新,我给出了两个相同的值。
我正在为此苦苦挣扎几个小时,任何帮助都会得到真正的赞赏,感谢您的时间。
您应该通知 angular 某些内容已更改:
scope.$apply(function () { ... });
见普伦克
P.S. 使用 ng-click
而不是 jQuery 点击事件。
相关文章:
- AngularJS:带有HTML和angular表达式的指令;编译”;具有外部范围的内容
- 角度布尔属性未在指令外部更新
- 控制器和外部指令之间的双向数据绑定
- 找不到AngularJS指令外部模板
- 在元素外部单击时激发事件的指令
- 使用外部单击关闭自定义指令弹出框
- 为什么从指令中更改外部作用域需要 scope.$apply(),即使我将范围选项设置为 false
- 如何在 AngularJS 中将自定义指令与外部 HTML 模板捆绑在一起
- 在指令外部调用范围变量
- 外部 AngularJS 指令无法正确构建内部指令
- 将外部函数传递到 Angular 指令中
- 基于外部变量重新编译指令
- 编写指令时的角度,未定义的外部库
- 如何在angular外部加载的页面上手动编译angular指令
- 如何使用指令在Angular中加载外部模板
- AngularJS:使用ng repeat与外部插件集成指令的问题
- 带有外部依赖项的Jasmine单元测试指令失败,类型错误:'[object对象]'
- Angular指令,将click事件绑定到外部元素不起作用
- AngularJS-带有外部模板的单元测试指令
- 如何将一个变量从指令(ngModel)传递到指令外部的html中