Javascript 检查指令是否具有属性

Javascript 检查指令是否具有属性,javascript,angularjs,Javascript,Angularjs,我有以下代码 <my-directive></my-directive> 像这样: <my-directive my-option></my-directive> 我该怎么做?一旦我有了属性,它的值应该是真的,对吗?我已经用=符号绑定了属性。您不应该在此处检查$scope.my选项,而是检查$scope.myOption CamelCased属性在HTML代码中仅为snake大小写;应该在所有剩余的JavaScript源代码中使用camel

我有以下代码

<my-directive></my-directive>
像这样:

<my-directive my-option></my-directive>


我该怎么做?一旦我有了属性,它的值应该是真的,对吗?我已经用
=
符号绑定了属性。

您不应该在此处检查
$scope.my选项,而是检查
$scope.myOption

CamelCased属性在HTML代码中仅为snake大小写;应该在所有剩余的JavaScript源代码中使用camelCase引用它们

因此,您的HTML标记应该如下所示:

<my-directive my-option></my-directive>
甚至可能不需要
$scope
,这会将表达式简化为什么

{{ myOption ? 'YES' : 'NO' }}

此外,如果您不想在HTML中显式地添加检查作为观察者,您可以使用指令的link函数来实现这一点。报告对此进行了更详细的解释

在指令中,按以下代码段使用它:

angular
    .module('myModule')
    .directive('myDirective', function() {
        return {
            restrict: 'A',
            scope: {
                myOption: '=?'
            },
            link: function(scope, element) {
                if (scope.myOption) {
                    // you have the attribute
                } else {
                    // you don't
                }
            }
        }
    });

您不应该在此处检查
$scope.my选项,而是检查
$scope.myOption

CamelCased属性在HTML代码中仅为snake大小写;应该在所有剩余的JavaScript源代码中使用camelCase引用它们

因此,您的HTML标记应该如下所示:

<my-directive my-option></my-directive>
甚至可能不需要
$scope
,这会将表达式简化为什么

{{ myOption ? 'YES' : 'NO' }}

此外,如果您不想在HTML中显式地添加检查作为观察者,您可以使用指令的link函数来实现这一点。报告对此进行了更详细的解释

在指令中,按以下代码段使用它:

angular
    .module('myModule')
    .directive('myDirective', function() {
        return {
            restrict: 'A',
            scope: {
                myOption: '=?'
            },
            link: function(scope, element) {
                if (scope.myOption) {
                    // you have the attribute
                } else {
                    // you don't
                }
            }
        }
    });

如果没有独立作用域(也可以使用独立作用域),可以直接检查属性:

angular
.module('myModule')
.directive('myDirective', function($parse) {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {
            var option;
            if (attrs.hasOwnProperty('myOption')) {
                // if attr is plain string
                option = attrs.myOption;
                // or parse from a scope property
                option = $parse(attrs.myOption)(scope);
            }
        }
    }
});

如果没有独立作用域(也可以使用独立作用域),可以直接检查属性:

angular
.module('myModule')
.directive('myDirective', function($parse) {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {
            var option;
            if (attrs.hasOwnProperty('myOption')) {
                // if attr is plain string
                option = attrs.myOption;
                // or parse from a scope property
                option = $parse(attrs.myOption)(scope);
            }
        }
    }
});

在指令的link函数中检查:link:function(scope,elem,attr){}在指令的link函数中检查:link:function(scope,elem,attr){}
myOption:'=?'
更好
myOption:'=?'
更好请解释最后一行
option=$parse(attrs.myOption)(scope)。请引用用于它的技术术语,我们也可以使用$parse服务()来解析角度表达式。在本例中,它只是由指令的“my option”属性给出的范围属性的名称$parse返回一个函数,第一个参数是上下文,这里是我们的作用域,表达式将在其上求值。简单地说:它获取由myoptions属性设置的scope属性(变量)的值。你也可以这样写:
scope[attrs.myOption]
ok。有些类似于
$compile
。请解释最后一行
option=$parse(attrs.myOption)(范围)。请引用用于它的技术术语,我们也可以使用$parse服务()来解析角度表达式。在本例中,它只是由指令的“my option”属性给出的范围属性的名称$parse返回一个函数,第一个参数是上下文,这里是我们的作用域,表达式将在其上求值。简单地说:它获取由myoptions属性设置的scope属性(变量)的值。你也可以这样写:
scope[attrs.myOption]
ok。有些类似于
$compile
。我将阅读差异