AngularJS使用NG-IF检查模块是否存在

时间:2015-09-06 17:55:27

标签: javascript angularjs module

我创建了一个名为" app.product"的自定义模块。有一组意见。

在主导航中,我创建了相关视图的链接。以下2个产品相关链接的示例。

StringEscapeUtils.unescapeJava("First\\nSecond").equals(jsono.getString("key"));

我只喜欢“产品”和“创建新产品”,只显示" app.product"模块已注册到应用程序。

我通常尝试使用以下语法:

<ul class="nav">
  <li><a ui-sref="home">Home</a></li>

  <li><a ui-sref="productList">Products</a></li>
  <li><a ui-sref="productAdd({productId:0})>Create New Product</a></li>
</ul>

这不起作用.... 我尝试创建一个返回bool的方法,并且如果有的话,它不能用于ng。

如果我手动硬编码真/假,它会有什么令人沮丧的:

<ul class="nav">
  <li>...</li>

  <li ng-if="angular.module('app.product')"><a ui-sref="productList">Products</a></li>
  <li ng-if="angular.module('app.product')"><a ui-sref="productAdd({productId:0})>Create New Product</a></li>
</ul>

这是我的模块和主appController的布局

<li ng-if="false"><a ui-sref="productList">Products</a><li>

在appController中创建方法不起作用。它只会在下面返回false:

//main application module
angular.module("app", ['ui.router',"app.product"]);

//main application controller
angular.module("app").controller("AppController", AppController);

function AppController(){
    var vm = this;
    vm.moduleExists = function(name){
       try{
          angular.module(name);
          return true;
       }
       catch(err){
          return false;
       }
    };
}

//app.product module
angular.module("app.product", []);

1 个答案:

答案 0 :(得分:1)

更新:您似乎有某种误解。

如果您的模块定义与您在问题中的方式相同:

angular.module("app", ['ui.router',"app.product"]);

您不会定义ui.routerapp.product个模块,您的app模块会抛出一个例外。检查jsfiddle

Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to:
Error: [$injector:modulerr] Failed to instantiate module app.product due to:
Error: [$injector:nomod] Module 'app.product' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

所以你的模块将永远在这里。

这不是“有棱有角”的做事方式。如果将app.product作为依赖项包含在内,它将始终为您的代码定义,或者角度应用程序甚至不会启动。

但是,您始终可以使用$injector作为依赖,并询问是否存在具有特定名称的依赖项。

angular.module('app').controller('myCtrl', myCtrl)

myCtrl.$inject = ['$scope','$injector']


function myCtrl($scope, $injector) {

   $scope.moduleProductExists= $injector.has('product')

}

并在ng-if

中使用它
 <li ng-if="moduleProductExists"><a ui-sref="productList">Products</a></li>

但请注意,它正在检查控制器/服务/指令是否存在,而不是整个模块。

如果您尝试使用依赖性做异国情调,请提供更多详细信息。