2

我注意到,当绑定到当前范围内不存在的属性时,您不会收到 Javascript 错误。事实上,我相信 Angular 会在作用域上设置一个新属性。

我曾经使用 KnockoutJS,当数据绑定表达式引用视图模型上的未定义属性时,它确实引发了 JS 错误。

有没有办法配置 AngularJS 来做同样的事情?我更喜欢这种“严格”的验证方法,因为 JS 错误消息有助于故障排除

示例 HTML:

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

和 Javascript:

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

HTML 上的拼写错误意味着绑定不匹配。如果有 JS 错误告诉我,那就太好了……

4

2 回答 2

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/

于 2014-02-18T17:37:07.193 回答
0

这不会引发异常,因为$scope.username1 == undefined. $scope只是一个普通的 javascript 对象,因此要求一个不存在的键将始终返回undefined{{undefined}}将插入一个空字符串;因此,也不例外。如果您的 HTML 包含{{bacon}}. 希望有帮助!

于 2014-02-18T16:58:37.060 回答