4

在 AngularJS 中,为了简单地通过 a 标签显示一个字段,我会这样做:

<div ng-show="aField">Content of aField</div>

<a ng-click="aField=true">Show aField</a>       

直到这里,没问题。我现在想放置更多按钮和字段,以便当我单击 A 时显示 A 的内容,然后当我单击按钮 B 时,A 的内容消失而 B 的内容出现。

我怎样才能做到这一点?谢谢你。

更新

谢谢大家的解决方案,他们有效!现在,我正在为 和 的每个内容制作一个模板,因为我有很多数据要显示,但都在相同的结构中。

这里是 index.html

<div ng-model="methods" 
 ng-include="'templateMethod.html'" 
 ng-repeat = "method in methods">

这里是script.js:

function Ctrl($scope) {
$scope.methods =
[ { name: 'method1',
    description: 'bla bla bla',
    benefits: 'benefits of method1',
    bestPractices : 'bestPractices',
    example: 'example'},

 { name: 'method2',
    description: 'bla bla bla',
    benefits: 'benefits of method2',
    bestPractices : 'bestPractices',
    example: 'example'} ];
}

这里是templateMethod.html:

<table>
 <tr>
   <td>
     <div ng-show="toShow=='{{method.name}}Field'">
     <h3>{{mmethodethod.name}}</h3>
     <p>    
       <strong>Description</strong>
       {{method.description}}
     </p>
     <p>    
       <strong>Benefits</strong>
       {{method.benefits}}
     </p>
     <p>
       <strong>Best practices</strong>
       {{method.bestPractices}}
     </p>
      <p>   
        <strong>Examples</strong>
        {{method.example}}
      </p>
    </div>
    </td>
    <td class = "sidebar">
      <ul>
         <li><a ng-click="toShow='{{method.name}}Field'" class="{{method.name}} buttons">{{method.name}}</a></li>   
      </ul>             
    </td>
  </tr>
</table>

有用!但是:如果我点击第一个按钮,然后点击第二个,第一个按钮的内容并没有消失,它出现在第一个按钮的内容下面......重复有问题吗?

谢谢

4

6 回答 6

4

在控制器中处理更复杂的逻辑可能会更好,但通常将指令字符串的内容视为普通 js:

<div ng-show="aField">Content of aField</div>
<div ng-show="bField">Content of bField</div>
<a ng-click="aField=true; bField=false">Show aField</a>
<a ng-click="aField=false; bField=true">Show bField</a>

ng-showng-hide:

<div ng-show="aField">Content of aField</div>
<div ng-hide="aField">Content of bField</div>
<a ng-click="aField=true">Show aField</a>
<a ng-click="aField=false">Show bField</a>

在前一种策略中,页面加载时没有任何显示。在后者中,bField内容默认显示。如果您有两个以上的项目,您可能会执行以下操作:

<div ng-show="toShow=='aField'">Content of aField</div>
<div ng-show="toShow=='bField'">Content of bField</div>
<div ng-show="toShow=='cField'">Content of cField</div>
<a ng-click="toShow='aField'">Show aField</a>
<a ng-click="toShow='bField'">Show bField</a>
<a ng-click="toShow='cField'">Show cField</a>
于 2013-10-27T12:04:42.517 回答
2

我猜您有一个项目列表,并希望显示每个项目的内容。手风琴组件所做的事情。

这是一个 plunker,展示了您如何做到这一点:http ://plnkr.co/edit/UTf3dEImiDReC89vULpX?p=preview

或者,如果您想在同一个地方显示内容(类似于主详细信息视图),您可以这样做:http ://plnkr.co/edit/68DJHL582oY4ecSiiUdE?p=preview

于 2013-10-27T12:22:02.043 回答
1

如果您的字段属于不同的控制器,我建议创建一个服务。

服务:

App.factory('StateService', function() {
  return {
    openPanel: ''
  };
});

在控制器中注入服务:

App.controller('OneCtrl', function($scope, StateService) {
   $scope.stateService = StateService;
});

最后使用它一个视图:

<a ng-click="stateService.openPanel='home'">Home</a>
<div ng-show="stateService.openPanel == 'home'">Content of Home</div>

演示:http: //jsfiddle.net/codef0rmer/BZcdu/

于 2013-10-27T14:18:17.263 回答
1

只需使用一个内容可见的变量。http://jsfiddle.net/gjbw7/

<a ng-click="show='a'">Show aField</a>

.

<div ng-show="show=='a'">Content of aField</div>
于 2013-10-27T12:38:56.980 回答
0

试试这个方法。

<div>{{content}}</div>
<a ng-click="content='a'">Show aField</a>
<br>
<a ng-click="content='b'">Show bField</a>
<br>
<a ng-click="content='c'">Show cField</a>
<br>
<a ng-click="content='d'">Show dField</a>
<br>
<a ng-click="content='e'">Show eField</a>
<br>
<a ng-click="content='f'">Show fField</a>
于 2013-10-27T11:53:46.023 回答
0

看看ng-switch指令。

<div ng-switch="aField">
  <div ng-switch-when="someValue1">
      HTML content that will be shown when the aField variable value is equal to someValue1
  </div>
  <div ng-switch-when="someValue2">
      HTML content that will be shown when the aField variable value is equal to someValue2
  </div>
  <div ng-switch-default>
      This is where the default HTML content will go (if aField value is not equal to any of the ng-switch-when values)
  </div>
</div>
于 2013-10-27T16:28:04.507 回答