2014-02-18 82 views
2

我注意到,當綁定到當前範圍中不存在的屬性時,您不會收到Javascript錯誤。事實上,我相信Angular會在範圍上建立一個新的屬性。AngularJs - 強制範圍屬性存在於angularJs綁定

我曾經使用KnockoutJS,當數據綁定表達式引用viewmodel上的一個未定義的屬性時,它確實會拋出JS錯誤。

有沒有辦法配置AngularJS做同樣的事情?我喜歡這種 '嚴' 驗證方法,

例HTML作爲具有JS錯誤消息有助於排除故障:

<div ng-app> 
    <div ng-controller="ctrl"> 
     {{username1}} 
    </div> 
</div> 

和Javascript:

function ctrl($scope) { 
    $scope.username = 'user1'; 
} 

上的HTML錯字指綁定不匹配。這將是很好的JS錯誤告訴我...

回答

2

你可能創建一個過濾器,檢查屬性被未定義:

app.filter("throwUndefined", function ($exceptionHandler) { 
     return function (input) { 
      if (input === undefined) { 
       $exceptionHandler(new Error("Property was undefined"), 
            "throwUndefined filter"); 
      } 
      return input; 
     }; 
    }); 

似乎有點的開銷,但與HTML這樣的:

<div ng-app="myApp" ng-controller="myController"> 
    {{variable | throwUndefined}} 
    {{variable1 | throwUndefined}} 
</div> 

未定義的變量將調用異常處理程序。沒有辦法看到觸發該屬性的屬性或查看是否因爲該屬性未定義或設置爲未定義值,但可以調用調用堆棧以查找它。看起來你希望在你的視圖和控制器之間有更多的信任 - 也就是說,我想說你的控制器要檢查一下,但是如果你這樣做,你總是可以確保設置一個值。

小提琴:http://jsfiddle.net/jeremylikness/BHjRg/

+0

嗯感謝您的建議,我會考慮這個選項,但是就像你說的實在是有點開銷。我想這意味着AngularJS不能被配置爲開箱即用......因爲這是一種潛在的解決方法,我會將其標記爲已回答 –

0

這不會拋出異常,因爲$scope.username1 == undefined$scope只是一個普通的javascript對象,所以要求一個不存在的鍵將總是返回undefined{{undefined}}將內插到一個空字符串;因此,也不例外。如果您的HTML包含{{bacon}},您將遭受同樣的命運。希望有所幫助!