问题 AngularJs指令中的问号


我在范围属性定义中看到了一些使用问号('?')的指令,如下所示:

    app.directive('userInfo', function() {
        return {
        restrict: 'A',
        scope: {prop: '=?'},
        templateUrl: 'some/template/url',
    };

我找了它,我看到的唯一想法就是: '=?'是什么意思?在angularJS指令中隔离范围声明?。但它没有按照他在那里解释的方式工作。我已成功运行我的应用程序,并没有抛出异常。

有人可以详细说明一下吗?


5908
2017-09-15 14:49


起源

你的申请代码是什么?如果我们不知道它的代码,我们怎么解释呢? - JB Nizet
根据您发送的链接,不应抛出任何异常,因为问号使定义的范围变量'prop'可选。 - efeder
在我的情况下,我没有使用'?'并没有抛出异常 - Rivi


答案:


如果你  添加 ? 和  放一个 prop 在您使用该指令的元素上的属性,然后将抛出异常。

添加 ?,将该物业标记为 可选的。正如在提到的那样 的文件 $compile

你可以使用=?避免这种行为?或=?attr以便将属性标记为可选。

我认为该领域的文档可能有点过时了。 NON_ASSIGNABLE_MODEL_EXPRESSION 只出现在 旧版本的修订版

请注意 只有在尝试写入scope属性时才会抛出异常。我把一个快速的傻瓜拼在一起来展示这个问题: http://plnkr.co/edit/hjUq6ZisuRG2C3mZpRDj?p=preview


13
2017-09-15 22:19



是的,我明白了。这不是一个艰难的问题。我的问题是,当我不使用'?'时而不使用元素中的'prop'属性不会抛出异常。所以我认为使用'?'有不同的解释 - Rivi
@ user1857251我更新了我的答案。希望现在更有帮助:) - Der Hochstapler
是的,我认为文档已经过时了。我已经尝试过了,正如你所说的那样 - 当你试图改变scope属性的值时会有一个异常,因为它是未定义的(如果你没有使用'?')。谢谢! - Rivi