【问题标题】:ng-if and ng-show in my Ionic application, neither works我的 Ionic 应用程序中的 ng-if 和 ng-show 都不起作用
【发布时间】:2015-08-31 20:48:05
【问题描述】:

html 代码如下所示:

<div ng-if="name=='John'">
<div class="item item-avatar"> <img ng-src="john.jpg"></div>
</div>
<div ng-if="name=='Margaret'"
<div class="item item-avatar"> <img ng-src="margaret.jpg"></div>
</div>

我也尝试过使用 ng-show,而不是 ng-if。都没有奏效。无论我使用哪一个,约翰和玛格丽特都显示在页面上。我也尝试过使用 ng-switch。

我之前在同一个 HTML 文件中初始化的变量“名称”:

<a class="item item-avatar item-icon-right" ng-init="name = 'John'" href = "#/Page3"></a>

单击上面的行会转到第 3 页,我需要根据 'name' 的值显示 John 或 Margaret。

是语法错误还是什么,因为这很有可能。我是 Ionic 和 AngularJS 的新手。

【问题讨论】:

  • 似乎在这里工作jsfiddle.net/2y36mjcw
  • 是的......我一定在其他地方做错了什么......谢谢! :)
  • 可能是个愚蠢的问题,但您是否包含 angular 脚本?
  • 对于 Ionic,我使用的是:&lt;div *ngIf="ready"&gt;ready to go&lt;/div&gt;

标签: html angularjs ionic-framework


【解决方案1】:

我修复了你 plunker - 现在它应该可以工作了。

错误 #1:ng-init 用于初始化,不在运行时设置值 -> 改用 ng-click

错误 #2:您对所有页面使用相同的控制器,但对于每个页面,都会初始化一个新控制器,这会重置“名称”属性

我实现了一个 setName 函数来设置 rootscope 中的名称并转到 page3。在正确的实现中,您应该将名称作为 $stateparam 传递给新的状态/页面。但为此,请查看 ui-router 文档。

  $scope.setName = function(name) {
    console.log(name);
    $rootScope.name = name;
    $state.go('Page3');
  };

【讨论】:

  • o_0 好的..我显然还有很长的路要走:) 谢谢!我会检查一下,看看它是否有效! :D
【解决方案2】:

你确定你开始使用 Angular 了吗?您是否设置了 ng-app 指令? 如果您有其他问题,如果您能提供一个可行的示例,将会有所帮助。

angular.module('app', []);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-init="name = 'John'">
  <button type="button" ng-click="name='John'">John</button>
  <button type="button" ng-click="name='Margaret'">Margaret</button>

  <div ng-if="name=='John'">
      This is John
  </div>
  <div ng-if="name=='Margaret'">
    This is Margaret
  </div>
</div>

【讨论】:

  • 我设置了 ng-app.我之前没有包含那个
  • 那么你必须发布你的完整代码;-)。我在您发布的部分中看不到语法错误。
  • 你初始化了角度模块angular.module('app', []); 吗?您在浏览器控制台中看到任何错误吗?
  • 是的 :D 我做到了。控制台中没有错误。我在应用程序中有大约 5-6 个页面,它们都加载了。只有这个错误。这让我发疯了一天。
  • 请提供您的代码,以便我们为您提供帮助
【解决方案3】:

试试这个:

<div ng-show="name=='John'" ng-init="name = 'John'">
  <div class="item item-avatar"> John</div>
</div>
<div ng-show="name=='Margaret'"
  <div class="item item-avatar"> Margaret</div>
</div>  

为我工作。我只是将 ng-if 更改为 ng-show - 当为 true 时将显示 div 内容,否则将其隐藏。我还在 div 中使用 ng-init。

【讨论】:

  • 我试过 ng-show。它不起作用。没关系,我一定在其他地方犯了一些错误!谢谢! :)
  • 好吧,如果这些页面有不同的控制器,那么 'name' 变量应该是一个 rootscope - $rootscope.name,而不是 $scope.name。
猜你喜欢
  • 1970-01-01
  • 2015-06-29
  • 2023-03-20
  • 2016-10-18
  • 2023-03-11
  • 2018-01-09
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多