2014-01-08 99 views
0

一些朋友和我正在開展一個項目。這是我與AngularJS合作的第二個項目,目前正在使用1.2.3版本。AngularJS複選框的奇怪行爲

儘管我有時會發現它的一些行爲奇怪,不明白爲什麼事情正在發生。

所以情況是這樣的......我在我的CSHTML文件followig:

<div class="checkbox"> 
    <label> 
     <input name="somecheckbox" type="checkbox" ng-click="click()" ng-model="displayRegardlessOfSomething" /> 
     <label>Display regardless of something</label> 
    </label> 
</div> 

<h1>{{displayRegardlessOfSomething}}</h1> 

在我的JavaScript文件我有一個僞指令中下面的代碼:

開始的時候:

$scope.displayRegardlessOfSomething = true; 

和我有以下幾點:

$scope.click = function() { 
    console.log($scope.displayRegardlessOfSomething) 
} 

每當我選中或清除該複選框我總是得到真正 ......然而,奇怪的是,裏面的<h1></h1>標籤的內容改變....因此,這就像我改變的價值在HTML層上的變量,而不是JavaScript的層上...

這究竟是爲什麼?

我已經解決了通過使用$ parent.displayRegardlessOfSomething的問題,但我不明白爲什麼這解決了這一問題...什麼擺在首位造成的問題?

回答

1

我想你的小提琴做了什麼,對我來說工作正常。

http://jsfiddle.net/nicolasmoise/X9KYU/1/

它適用於你,當你使用$parent讓我覺得家長控制這裏有毛病的事實。也許你有兩個同名的變量?

P.S. :請記住,在Javascript中,基元是通過值傳遞的,而對象是通過引用傳遞的。這是Angular開發人員犯下許多錯誤的原因。看到這個小提琴,我說明我的觀點。

與原語:http://jsfiddle.net/nicolasmoise/X9KYU/

使用對象:http://jsfiddle.net/nicolasmoise/X9KYU/2/

+0

是的,我明白,這工作對你罰款,這也角文檔中工作正常。 我不認爲這是我的情況有些事情是被引用或按值傳遞有關...所以也許,冥冥中我在我的應用程序的另一個$範圍....但是,我只有一個指令,一個使用命名變量的控制器:/ – Marin

+0

正如我和@null都試圖說的那樣,問題很可能發生在您的父控制器之一(我們沒有)。所以儘量使用對象,而不是原語,換句話說,「在你的ng模型中有一個點」 – NicolasMoise

+0

好吧,我想我明白了。不過,我仍然不太明白衝突可能在我的代碼中的哪個位置顯現:/ 但我會採納您的建議並使用對象:) – Marin

2

除非你非常確定一切都住在同一個範圍內,這是幾乎從來沒有,你應該始終有一個點的地方在你的NG模型表達式

myApp.controller('MyController2', function($scope) { 

    $scope.model = { displayRegardlessOfSomething: true }; 

    $scope.click = function() { 
    console.log($scope.model.displayRegardlessOfSomething); 
    }; 
}); 

<input type="checkbox" 
     ng-click="click()" 
     ng-model="model.displayRegardlessOfSomething" /> 

有關現場演示的詳細信息,請參見this plunker

+0

謝謝你的演示:) – Marin