1

我想通了,我的角度腳本工作:

$scope.CurrentUser = null; 
$scope.DatePicker = new Date(); 
$scope.$watch('DatePicker', function (newValue, oldValue) { 
    if (newValue > new Date()) 
     $scope.DatePicker = new Date(); 
}, true); 
<div> 
    <input data-ng-model="DatePicker" type="date" id="datepicker" /> 
</div> 

但如果我添加一個if-statment:

<div data-ng-if="!CurrentUser"> 
    <input data-ng-model="DatePicker" type="date" id="datepicker" /> 
</div> 

試試: http://codepen.io/anon/pen/jWBEVM

但我不明白爲什麼。有沒有已知的問題?任何人都可以幫忙嗎?

+1

'NG-if'創建自己的範圍,所以_DatePicker_內的範圍不利用在控制器 – Grundy

+0

,只要你不是在if語句改變的DatePicker ,它們是同步的......所以,似乎是相同的 – Marc

+0

這是工作原型繼承的方式:您可以讀取paernt屬性,但是當您嘗試寫入時 - 您將創建自己的屬性,而不是在父級中更改 – Grundy

回答

1

doc

此指令創建新的範圍。

所以,你的情況

<div data-ng-if="!CurrentUser"> 
    <input data-ng-model="DatePicker" type="date" id="datepicker" /> 
</div> 

DatePicker在這裏從控制器ng-if範圍,並且不添加範圍。

解決,您可以使用$parent財產

<div data-ng-if="!CurrentUser"> 
    <input data-ng-model="$parent.DatePicker" type="date" id="datepicker" /> 
</div> 

或申請 「點規則」

<div data-ng-if="!CurrentUser"> 
    <input data-ng-model="data.DatePicker" type="date" id="datepicker" /> 
</div> 

和JS

$scope.data = { DatePicker : new Date() }; 
$scope.$watch('data.DatePicker', function (newValue, oldValue) { 
... 

查看更多一點關於繼承範圍, wiki

樣品

​​