Javascript ng if、ng show或自定义指令?关于最佳做法的建议

Javascript ng if、ng show或自定义指令?关于最佳做法的建议,javascript,angularjs,Javascript,Angularjs,我对angular还不太熟悉,所以如果这是一个noob问题,我很抱歉。在我的小Ionic/Angular应用程序中,根据一些基本逻辑,我只需要显示3个按钮中的1个。目前,我将在控制器中执行以下操作: if ($scope.book.borrowedBy == $rootScope.signedInUser.email) { $scope.mode = 'return'; } else if ($scope.book.borrowedBy) { $scope.mode = 'req

我对angular还不太熟悉,所以如果这是一个noob问题,我很抱歉。在我的小Ionic/Angular应用程序中,根据一些基本逻辑,我只需要显示3个按钮中的1个。目前,我将在控制器中执行以下操作:

if ($scope.book.borrowedBy == $rootScope.signedInUser.email) {
    $scope.mode = 'return';
} else if ($scope.book.borrowedBy) {
    $scope.mode = 'request';
} else {
    $scope.mode = 'borrow';
}

$scope.borrow = function() {
    $scope.book.borrowedBy = $rootScope.signedInUser.email;
    $scope.book.$save();
    $scope.mode = 'return';
}

$scope.return = function() {
    $scope.book.borrowedBy = null;
    $scope.book.$save();
    $scope.mode = 'borrow';
}
在我看来,这是不完全的:

    <a href="mailto:{{book.borrowedBy}}" ng-show="mode === 'request'" class="button button-block button-positive">
        Request book
    </a>

    <button ng-show="mode === 'return'" class="button button-block button-positive" ng-click="return()">
        Return book
    </button>

    <button ng-show="mode === 'borrow'" class="button button-block button-positive" ng-click="borrow()">
        Borrow book
    </button>

回执
借书
虽然这样做有效,但感觉像地狱一样凌乱。根据最佳实践,这是否应该在指令中?或者如果,我应该使用
ng

是否可以根据指令中的条件输出不同的模板代码(到目前为止,我只创建了非常基本的条件)

如果它应该是一个指令,有人能给我一个类似行为的例子作为起点吗


提前感谢

除了您的代码之外,在使用这两个指令ng show/ng hide vs ng时,您应该记住什么?如果您希望html在DOM中还是不希望

  • ng if将实际从DOM树中删除该节点,因此它不会 可供开发工具中的任何人使用

  • ng show/ng hide只需使用css display:none来删除即可 从用户的可见性中删除项目

  • 自定义指令为什么要重新发明轮子?如果您只是需要显示/隐藏或删除DOM节点,那么angular已经为您完成了这项工作—使用他们的现成解决方案。如果您需要真正特殊的逻辑,但这无法解决,那么您应该编写自己的指令

所以。。。这完全取决于你的处境。你必须扪心自问,我是否希望有人能够打开开发工具并取消单击display none,然后完全访问隐藏的逻辑,或者这只是一个问题。如果您在“我不想让用户访问逻辑”中对此回答“否”,那么您的选择很简单-ng If并将节点完全从DOM中删除

考虑到您的代码,这更符合您的需求——这些选择的布尔对象

控制器ex:

$scope.mode = {
   return: true,
   request: false,
   borrow: false
}
HTML示例:

<button ng-show="mode.return" class="button button-block button-positive" ng-click="return()">
    Return book
</button>

回执

我想看看ngSwitch

我想我会在部分中使用ngclass表达式。你真的可以压缩它。我写道,这有助于澄清关于
ngShow/ngHide
ngIf
的一些混淆。也许对你有帮助。