我有我的HTML中的div編碼如下:
<div ng-repeat="loss in Model.plDetails track by $index">
<div class="col-sm-2">
<div class="input-group">
<input type="text" class="form-control" datepicker-popup="MM/dd/yyyy" ng-model="loss.Date" id="loss-date{{$index+1}}"
datepicker-pattern="((0[13578]|1[02])[-/]31[-/](18|19|20)[0-9]{2})|((01|0[3-9]|1[1-2])[-/](29|30)[-/](18|19|20)[0-9]{2})|((0[1-9]|1[0-2])[-/](0[1-9]|1[0-9]|2[0-8])[-/](18|19|20)[0-9]{2})|((02)[-/]29[-/](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))"
is-open="datePicker{{$index+1}}.opened" max="maxDate" max-date="maxDate" date-format placeholder="MM/DD/YYYY"/>
<span class="input-group-btn">
<button type="button" class="btn btn-default" ng-click="open($event,'datePicker{{$index+1}}')"><i class="icon icon-calendar"></i></button>
</span>
</div>
</div>
<div class="col-sm-2">
<input type="number" ng-model="loss.amount" placeholder="$ Amount" />
</div>
<div class="col-sm-2">
<select ng-model="loss.type" placeholder="Loss Type">
<option value="0"></option>
<option value="2">Test</option>
</select>
</div>
<div class="col-sm-2">
Add Line
</div>
</div>
「打開」功能在我的JavaScript編碼爲:
$scope.open = function ($event, targetDatePicker) {
$event.preventDefault();
$event.stopPropagation();
$scope[targetDatePicker].opened = !$scope[targetDatePicker].opened;
}
的問題是,當我嘗試運行此代碼首先給出了一個錯誤:「語法錯誤:令牌'{'是表達式[datePicker {{$ index + 1}}。第11列開始]處的意外標記,以[{{$ index + 1 }}。打開。」這是定義了is-open的代碼行。
如果我將is-open更改爲datePicker1.opened,它的工作方式會越過錯誤(但從長遠來看對我的代碼不起作用,因爲我需要最後一位數字是可變的),但有另一個問題。當點擊日曆圖標觸發ng-click事件時,由於「targetDatePicker」被解釋爲datePicker {{$ index + 1}},所以拋出了「未定義」的「無法讀取屬性」錯誤存在。
必須有讓他們出來爲DATEPICKER1,DATEPICKER2等,以評估這些值的方法...
更新:我也嘗試過的代碼在。我試圖建立的代碼爲:
$scope.datePicker = {};
$scope.open = function ($event, idx) {
$event.preventDefault();
$event.stopPropagation();
$scope.datePicker['idx' + idx].opened = !$scope.datePicker['idx' + idx].opened;
};
隨着HTML作爲<input type="text" class="form-control ng-pristine ng-valid ng-isolate-scope ng-empty ng-valid-date ng-touched" datepicker-popup="MM/dd/yyyy" ng-model="loss.Date" id="loss-date1" datepicker-pattern="((0[13578]|1[02])[-/]31[-/](18|19|20)[0-9]{2})|((01|0[3-9]|1[1-2])[-/](29|30)[-/](18|19|20)[0-9]{2})|((0[1-9]|1[0-2])[-/](0[1-9]|1[0-9]|2[0-8])[-/](18|19|20)[0-9]{2})|((02)[-/]29[-/](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))" is-open="datePicker['idx'+$index].opened" max="maxDate" max-date="maxDate" date-format="" placeholder="MM/DD/YYYY">
,但我仍然得到Cannot read property 'opened' of undefined
錯誤。
你不應該在NG-點擊屬性,使用大括號,嘗試治療$指數更像JavaScript數字...'datePicker'+($ index + 1) –
在我的第二次嘗試中,我完全刪除了datepicker,只是有'',仍然得到'無法讀取屬性'打開'undefined error'錯誤, – SpaceCowboy74
@ SpaceCowboy74你期待'datePicker {{$ index + 1} ''成爲一個對象?該對象如何或何處被初始化?你有沒有試過'is-open =「datePicker [$ index + 1] .opened」'? –