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>'