Angularjs 为什么赢了';是否在该递归角度指令中更新模型?
这让我一整天都很困惑 为什么我在文本字段中键入时名称不会更新?一切照章办事。出了什么问题 总而言之:我正在尝试构建一个递归指令,当它遇到一个对象时,它会再次调用自己,直到到达字符串级别。当它这样做时,它会给出一个可以改变字符串的输入(即对象中键/值的值)Angularjs 为什么赢了';是否在该递归角度指令中更新模型?,angularjs,recursion,angularjs-directive,scope,angular-ngmodel,Angularjs,Recursion,Angularjs Directive,Scope,Angular Ngmodel,这让我一整天都很困惑 为什么我在文本字段中键入时名称不会更新?一切照章办事。出了什么问题 总而言之:我正在尝试构建一个递归指令,当它遇到一个对象时,它会再次调用自己,直到到达字符串级别。当它这样做时,它会给出一个可以改变字符串的输入(即对象中键/值的值) {{问候} 角度模块('测试',[])) .controller('ctrl',函数($scope){ $scope.greet={ “姓名”:“乔”, “姓氏”:“诺里斯” }; }) .directive('myDir',函数($comp
{{问候}
角度模块('测试',[]))
.controller('ctrl',函数($scope){
$scope.greet={
“姓名”:“乔”,
“姓氏”:“诺里斯”
};
})
.directive('myDir',函数($compile){
模板变量=
'' +
''+
''+
''+
''+
'' +
''+
''
返回{
限制:'E',
范围:{
模型:'='
},
控制器:功能($scope){
$scope.isObject=函数(val){
if(typeof val=='object'){
控制台日志(“isObject”);
返回true;
}否则{
console.log(“不是对象”);
返回false;
}
}
},
链接:功能(范围、元素){
html(theTemplate);//.append(theTemplate);
$compile(element.contents())(范围);
}
}
});
当我们为ng model
提供变量名
时,ng model
将在编译变量的范围内更新变量
ng repeat
为每次迭代创建一个新的范围
当我们在ng repeat
内部使用ng model
时,每个ng model
都将使用ng repeat创建的新范围进行编译。因此,这些值不会在控制器的范围内更新
要更新控制器作用域中的值,请使用点表示法。(即,在控制器中创建一个对象,并将ng模型绑定到它的属性)我认为您的问题在于指令模板中出现了一个错误(拼写错误)) 您应该将模型属性值从
model[key]
更改为model[k]
,因为您声明了(k,v)
,它们是ng repeat
中的键值对
模板
var theTemplate =
'<div ng-if="isObject(theModel)">' +
'<div ng-repeat="(k,v) in theModel">' +
'<my-dir the-model="theModel[k]"></my-dir>' +
'</div>' +
'</div>' +
'<div ng-if="!isObject(theModel)">' +
'<input type="text" ng-model="theModel">' +
'</div>'
var模板=
'' +
'' +
'' +
'' +
'' +
'' +
'' +
''
希望这能帮助您,谢谢。不要在
ng模型中使用原语。基本体没有继承。经验法则<代码>ng型号
中应始终有一个点it@charlietfl那么我应该用什么呢?你是什么意思ng model
s应该有一个点?阅读角度范围,特别是范围内的继承我不明白它是如何工作的,但我不明白关于子范围和reccursion@Raphi这对你有帮助吗?
var theTemplate =
'<div ng-if="isObject(theModel)">' +
'<div ng-repeat="(k,v) in theModel">' +
'<my-dir the-model="theModel[k]"></my-dir>' +
'</div>' +
'</div>' +
'<div ng-if="!isObject(theModel)">' +
'<input type="text" ng-model="theModel">' +
'</div>'