сокращение для угловой зависимости между атрибутами

0

У меня есть следующая ситуация

directives.directive('x', function () {
    return {
        scope: {
            a: "=",
            b: "="
        },
        controller: function($scope){
            if((angular.isDefined($scope.a) && !angular.isDefined($scope.b))
                || (!angular.isDefined($scope.a) && angular.isDefined($scope.b))){
                throw new Error('a and b need to be specified');
            }
        }
    };
}

У меня проблема с моим, if внутри контроллера. Как вы можете видеть, это трудно прочитать, и это не очень эффективно.

То, что он пытается сделать, это увидеть, определены ли как a и b в области $scope. Они могут пропустить, но если один из них указан, другой должен стать обязательным.

Есть ли лучший способ написать это?

Позже отредактируйте: Давайте также расскажем о том, когда случай наличия трех переменных в области видимости, и нам нужно то же самое поведение. Как вы продолжите?

  • 1
    попробуйте if(!$scope.a != !$scope.b)
  • 1
    он будет вести себя как оператор xor, но для легкого понимания кода я пойду к тому, что вы написали, хотя это очень многословно.
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Вы можете использовать функцию isUndefined

if(angular.isUndefined($scope.a) || angular.isUndefined($scope.b))
        {
            throw new Error('a and b need to be specified');
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню