AngularJs - 强制范围属性存在于 AngularJs 绑定(bind)上

标签 angularjs angular-ngmodel

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

我曾经使用过 KnockoutJS,当数据绑定(bind)表达式引用 View 模型上未定义的属性时,它确实会抛出 JS 错误。

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

示例 HTML:

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

和 JavaScript:

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

HTML 上的拼写错误意味着绑定(bind)不匹配。如果能得到一个 JS 错误来告诉我那就太好了...

最佳答案

您可以创建一个过滤器来检查未定义的属性:

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>

undefined variable 将调用异常处理程序。没有办法查看触发此问题的属性,或者查看是否是因为该属性未定义或设置为未定义的值,但您可以通过探索调用堆栈来找到它。不过,您似乎希望 View 和 Controller 之间有更多的信任 - 也就是说,我会说让您的 Controller 检查,但如果您这样做,您始终可以确保设置了一个值。

fiddle :http://jsfiddle.net/jeremylikness/BHjRg/

关于AngularJs - 强制范围属性存在于 AngularJs 绑定(bind)上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859151/

相关文章:

javascript - 如果数组尚未创建,则为 Ng-init

javascript - 在 AngularJS App 中访问 Zurb Foundation for Apps 模块

angularjs - 如何修复此代码以在网页上显示内容?

javascript - 使用 ng-model 和 select 来显示数据属性而不是值?

javascript - typescript :如何在自定义过滤器中使用 Angular $filter

javascript - 复选框 ng-click 触发了两次

javascript - 如果 ng-model 未更改,则无法使用 ng-click 将项目推送到 javascript 数组

javascript - 使用 Angularjs 和 ng-model 进行数据绑定(bind),将毫米转换为英尺和英寸,反之亦然

angular - Angular 5 中具有未指定名称属性的表单控件没有值访问器

javascript - ng-options 中的值作为对象而不是字符串存储在 ng-model 中