Angularjs 角度-通过ng开关进行双向绑定
我有一个带有作用域的指令和一个双向'='绑定到父作用域值(是的,在对象内部以避免继承问题)。该指令的模板依次包含一个ng开关,这当然会创建另一个作用域。在ng开关内,我希望将textarea绑定到原始值。它正确初始化,但当用户编辑该值时,父作用域值不会更改Angularjs 角度-通过ng开关进行双向绑定,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我有一个带有作用域的指令和一个双向'='绑定到父作用域值(是的,在对象内部以避免继承问题)。该指令的模板依次包含一个ng开关,这当然会创建另一个作用域。在ng开关内,我希望将textarea绑定到原始值。它正确初始化,但当用户编辑该值时,父作用域值不会更改 var myApp = angular.module('myApp', []); myApp.directive('csContenteditable', function () { return { restric
var myApp = angular.module('myApp', []);
myApp.directive('csContenteditable', function () {
return {
restrict: 'A',
scope: {
content: "=",
editMode: "=csContenteditable",
},
template:
"<div ng-switch='editMode'>" +
"<div ng-switch-when='false'>{{content}}</div>" +
"<div ng-switch-when='true'><textarea ng-model='content'/><div>" +
"<div>"
};
});
function MyCtrl($scope) {
$scope.editMode = false;
$scope.values = {value: 'foo'}
}
var myApp=angular.module('myApp',[]);
myApp.directive('csContenteditable',function(){
返回{
限制:“A”,
范围:{
内容:“=”,
编辑模式:“=csContenteditable”,
},
模板:
"" +
“{{content}}”+
"" +
""
};
});
函数MyCtrl($scope){
$scope.editMode=false;
$scope.values={value:'foo'}
}
正确的方法是什么?我可以使用ng show而不是ng switch,它可以工作,b/c没有额外的作用域,但使我的DOM比实际情况中需要的要重得多
演示:
- 单击“编辑模式”复选框
- 注意文本区域用“foo”初始化
- 现在输入文本区域李>
- 注意,外部范围中的“当前值”不会更新
- 我会倒霉的,我刚刚解决了这个问题。答案是在指令内的两种情况下都使用
$parent.content
而不是content
这是一个范围问题。。。
ng如果指令创建了一个新范围,这就是模型未更新的原因
若您像在那个里使用的那个样使用基元对象,那个么子作用域将创建新实例,而不是从父作用域继承
绑定值
而不是值。值
是一个基本变量,您的指令范围不会对原始对象进行阴影/隐藏
这是您的html
<div content="values" cs-contenteditable="editMode" />
这是指令的模板
"<div ng-switch='editMode'>" +
"<div ng-switch-when='false'>{{content.value}}</div>" +
"<div ng-switch-when='true'><textarea ng-model='content.value'/><div>" +
"<div>"
“”+
“{content.value}}”+
"" +
""
有关更多信息,请查看
这里是最新的
更新
我建议使用复杂对象而不是使用$parent,因为如果您在指令中使用一些指令创建新范围,如ng if
中断$parent解决方案,下面是一个例子…或者你可以使用内容。value
而不是内容
$parent不是一个很好的方法。基本上,如果你发送一个基本对象,子范围创建一个新的instance@wickY26这就是我困惑的地方。我认为,通过在根作用域中创建values对象并将values.value传递到directives content属性中,我应该避免这个问题,内部作用域中的内容应该指向外部作用域中的values.value。你能帮我看看为什么不是这样吗?我知道你的小提琴很管用。所以,我知道它管用,但这是我的问题。假设我的模型是:recipe:{name:“foo”,flavor:“bar”}。这是来自服务器的json,我不想在它的两个方向上进行可怕的转换。现在我想用我的指令来编辑这两个字段。我需要能够写作和写作。我不会写字。这就是为什么我认为$parent是一个更好的解决方案