Javascript ng repeat内部的指令双向数据绑定不起作用
在这里,我想根据指令范围的变化更新控制器范围值,但其仅在ng repeat外部工作,且不在ng repeat内部工作。 HTMLJavascript ng repeat内部的指令双向数据绑定不起作用,javascript,angularjs,angularjs-ng-repeat,prototypal-inheritance,Javascript,Angularjs,Angularjs Ng Repeat,Prototypal Inheritance,在这里,我想根据指令范围的变化更新控制器范围值,但其仅在ng repeat外部工作,且不在ng repeat内部工作。 HTML <div ng-app="app"> <div ng-controller="MainCtrl"> <div> <h3> outside repeat </h3> <br> Name <strong>{{name}}</str
<div ng-app="app">
<div ng-controller="MainCtrl">
<div>
<h3>
outside repeat
</h3>
<br> Name <strong>{{name}}</strong>
<div class="directive" my-directive name="name"></div>
<button ng-click="run()">See changes</button>
<br>
<br>
<h3>
Inside repeat
</h3>
<br>
<div ng-repeat="(k,v) in rawdata">
{{k}} {{v.key}} Name <strong>{{name}}</strong>
<div class="directive" my-directive name="name"></div>
<button ng-click="run()">See changes</button>
<br>
</div>
</div>
</div>
<div class="directive" my-directive name="model.name"></div>
外部重复
Name{{Name}}
看到变化了吗
内重复
{{k}{{v.key}}Name{{Name}
看到变化了吗
JS
var app = angular.module("app", []);
app.controller("MainCtrl", function($scope) {
$scope.name = "HappyNewYear2016";
$scope.run = function() {
alert($scope.name);
}
$scope.rawdata = [{
key: "event1",
}, {
key: "event2",
}];
});
app.directive("myDirective", function() {
return {
restrict: "EA",
scope: {
name: "="
},
template: [
"<div>",
"Name : <strong>{{name}}</strong>; Change name:<input type='text' ng-model='name' /><br/>",
].join("")
};
});
var-app=angular.module(“app”,[]);
应用程序控制器(“MainCtrl”,函数($scope){
$scope.name=“HappyNewYear2016”;
$scope.run=函数(){
警报($scope.name);
}
$scope.rawdata=[{
关键:“事件1”,
}, {
关键:“事件2”,
}];
});
app.directive(“myDirective”,function()){
返回{
限制:“EA”,
范围:{
名称:“=”
},
模板:[
"",
“名称:{{Name}};更改名称:
”,
].join(“”)
};
});
请帮助我更新此ngrepeat内指令的控制器值。基本上问题在于
$scope。控制器内的name
与您传递给ng repeat
元素内指令的名称不同,因为ng repeat
确实创建了一个子范围,该子范围在循环通过rawdata
对象时通常从父范围继承
有几种方法可以解决这个问题
名称
之前使用$parent
注释来解决与子范围和父范围相关的问题,该注释将引用父范围
$parent
会让你发疯。假设您有两个或三个层次结构的子作用域,它将变得像$parent.$parent.$parent.name
,看起来非常复杂
name
属于基本数据类型,因此在创建子范围时,父范围的基本数据类型值在子范围内不可访问。这就是为什么要使用$parent
来指示名称属于父范围。只要在声明对象时遵循do annotation
,就可以克服这个问题。这将帮助您通过遵循原型继承使父范围属性在子范围内可用<div ng-app="app">
<div ng-controller="MainCtrl">
<div>
<h3>
outside repeat
</h3>
<br> Name <strong>{{name}}</strong>
<div class="directive" my-directive name="name"></div>
<button ng-click="run()">See changes</button>
<br>
<br>
<h3>
Inside repeat
</h3>
<br>
<div ng-repeat="(k,v) in rawdata">
{{k}} {{v.key}} Name <strong>{{name}}</strong>
<div class="directive" my-directive name="name"></div>
<button ng-click="run()">See changes</button>
<br>
</div>
</div>
</div>
<div class="directive" my-directive name="model.name"></div>
带点符号
ng click=“run(name)”
<div ng-repeat="(k,v) in rawdata">
{{k}} {{v.key}} Name <strong>{{name}}</strong>
<div class="directive" my-directive name="name"></div>
<button ng-click="run(name)">See changes</button>
<br>
</div>
name
属性这都是因为原型继承是如何工作的,因为scopes指令和controller对model都有相同的名称。子指令对控制器模型进行阴影处理 不要将控制器模型直接存储为变量,而是将其与对象一起使用
$scope.data = {
name : 'HappyNewYear2016'
}
然后将其用作
数据。name
在ng repeat中设置。这也会反映在家长身上。非常感谢@Pankaj。。做注释可以解决我的问题……:):)再次感谢您的解释和工作经验。很高兴能帮助您。谢谢:)谢谢@Diljohn7541…:)