【发布时间】:2024-01-23 06:51:01
【问题描述】:
好吧,我有一个问题。我有一个 ng-repeat,里面有一个带有 ng-change() 的输入。这是指令模板的一部分,双向绑定到父对象。如果我在输入框中输入内容,一切正常并且父对象会更新。但是,当我必须从指令的控制器中替换父对象时,我遇到了一个问题。
问题是,一旦父对象被替换,视图就会绑定新的(替换的)值。那时同样的函数(如在 ng-change() 中)被手动触发以进行一些计算。
但是,我注意到再次调用了相同的函数(不知道如何调用)。重要的是输入的 ng-model 是未定义的,当它们被自动调用时。结果,最终父对象包含值 undefined。
我仍然很困惑,为什么在控制器方法调用之后调用 ng-change。是否必须对 ng-repeat 创建的子范围做一些事情。
我已经使用了 $index 的跟踪。 我已经将模型绑定到 parentObj.something.something[$index]
感谢以上任何帮助...
我有
module.directive('myDirective', function () {
return {
scope: {
target: '=',
},
controller: 'DemoController',
templateUrl: 'app/demo/html/demo.html'
}
});
主模板:
<li ng-repeat="l in group_Main.mains"
<li ng-repeat="target in l.description.Value track by $index"
<li ng-repeat="(key, groups) in target.group track by $index">
<div layout="row" layout-wrap myDirective target="group"></div>
</li>
</li>
</li>
app/demo/html/demo.html::指令模板
<div class="table_FY_height" flex ng-repeat="m in months track by $index">
<input ng-change="changeIt(target.targets.years[1].values.data[$index], target, year,parent, $index)"" ng-if="$index>currentMonth" ng-model="target.targets.years[1].values.data[$index]"/>
</div>
在指令的控制器中:
module.controller('DemoController', function($scope, $rootScope){
changeIt(-1,$scope.target,$scope.year,$scope.parent);
}
从指令的控制器,我正在尝试调用 API 并将 target 数据更新为:
http.get(url).then({
function(APIResponse){
for(var i=0; i<12; i++){
target.targets.years[1].values.data[i] = APIResponse.targets.years[1].values.data[i]
}}, function(error){
//error handling here}
}
这样做会调用指令并使用来自 APIResponse 的新值更新屏幕上的视图。由于指令视图是使用 ng-show 控制的,因此新值在视图中保持不变。每个指令调用在控制器中调用此函数一次,第一个参数为 -1。但在那之后,它再次以第一个值为“未定义”的方式运行。使用 undefined,它运行的次数与编译指令的次数一样多。因此 target.targets.years[1].values.data[$index] 变得未定义。
任何想法出了什么问题?几个小时以来,我一直在摸不着头脑。
【问题讨论】:
-
你能添加一些代码吗..?了解更多关于正在发生的事情..
-
@PankajParkar 请再看看。以防万一,语言不清楚。
-
能否提供带有示例数据的示例 plunkr?
-
@SaurabhTiwari 你的问题解决了吗?任何 plunker 或您的数据源都会很棒!
-
如果您发现了解决方案,请回答您自己的问题并将其标记为已接受
标签: javascript angularjs ng-repeat