panodataName
函数中为什么$scope.addPanodata
变空?
HTML:
<input type="text" class="form-control" ng-model="panodataName" style="width:auto;padding:0;">
<a class="btn btn-primary" href="javascript:;" ng-click="addPanodata(pano.objectId)">Add</a>
JS:
angular.module('yoApp')
.controller('addPanoCtrl', function($q, $scope, $rootScope, $routeParams, serviceUpload) {
$scope.panodataName = ''
$scope.addPanodata = function(panoId) {
var Panodata = AV.Object.extend('PanoramaData'),
panodata = new Panodata(),
panoJSON = _.where($scope.building.pano, {'objectId': panoId})
$scope.pano = panoJSON[0]
console.log($scope.panodataName)
console.log($scope.panodataName)
panodata.save(json, {
success: function(object) {
},
error: function(object, error) {
}
})
}
我发现它很奇怪,因为如果我这样做:
{{panodataName}}
panodataName
正确显示input
的值。
修改
也许是因为它在ng-repeat
内?
<div class="col-md-6" ng-repeat="panodata in pano.panoData">
答案 0 :(得分:2)
你说你在ng-repeat
内得到了这个逻辑。我怀疑那是你的问题。
对于每个&#39; itteration&#39; ng-repeat
的{{1}}创建一个新的scope
。因此,ng-model="panodataName"
将一个名为panodataName
的属性绑定到该循环的特定迭代的本地范围,而不是绑定到全局控制器范围。
此外,如果您在ng-repeat中添加{{panodataName}}
,那么它将起作用并打印输入文本,因为它与ng-repeat的子范围绑定。
我相信你想要的是绑定到ng-repeat
的父范围。这是您实际定义panodataName
属性以及尝试记录的内容。
为此,您还需要更改ng模型:
ng-model="$parent.panodataName"
$parent
是特定循环itteration范围的全局变量,指向ng-repeats
父范围。
希望这是有道理的,我添加了一个小提琴演示。
注意:此实现有一个缺点,因为如果更新ng-repeat中的所有其他输入,则每个输入现在都绑定到同一个变量。
https://jsfiddle.net/j4txmzhe/
编辑:添加证据,
这表明ng-repeat
创建了新的范围directives-that-create-scopes
此外,谷歌会提出this SO答案,其中的评论描述了为什么避免$parent
转向的好主意。