2013-10-14 98 views
0

我正在嘗試使用AngularJS來創建一個簡單的單擊以加粗效果。我希望不要涉及任何控制器腳本,但包含或不包含,我的代碼不起作用。ng-class和ng-click不起作用

我的HTML代碼的角度標記

<div ng-app="organHome"> 
    <dl class="sub-nav" ng-controller="inModalSwitchCtrl"> 
     <dd ng-class="content:bold"><a ng-click="switchContent()" ng-model="content">Contents</a> 
     </dd> 
     <dd ng-class="comment:bold"><a ng-model="comment" ng-click="switchComment()">Comments</a> 
     </dd> 
    </dl> 
</div> 

我的js代碼:

angular.module('organHome', []) 

    .controller('inModalSwitchCtrl', function ($scope) { 
    $scope.content = true; 
    $scope.comment = false; 

    $scope.switchContent = function ($scope) { 
     $scope.content = true; 
     $scope.comment = false; 
    }; 

    $scope.switchComment = function ($scope) { 
     $scope.comment = true; 
     $scope.content = false; 
    }; 
}); 

這裏是小提琴的例子

http://jsfiddle.net/qHkWA/

我知道那一定是很菜鳥這是我的,但我卡住了。任何幫助?


我最初的目標是儘量減少我的代碼,希望沒有controller.js。

如果無論如何只用現有的指令去做,我很樂意跟隨!

我的可怕和不工作的做法是這樣的:

<dl class="sub-nav"> 
    <dd ng-class="'active':content"><a ng-click="content = true" ng-model="content">Contents</a></dd> 
    <dd ng-class="'active':comment"><a ng-model="comment">Comments</a></dd> 
</dl> 
+0

你的jsfiddle例子在Chrome控制檯拋出一個錯誤:'未捕獲的錯誤:沒有模塊:organHome'我不知道這是根本原因。 – JeffryHouser

回答

2

在HTML:

<dd ng-class="{'bold':content}"><a ng-click="switchContent()" ng-model="content">Contents</a></dd> 

    <dd ng-class="{'bold':comment}"><a ng-model="comment" ng-click="switchComment()">Comments</a></dd> 

還添加CSS:

.bold {font-weight: bold} 

DEMO

編輯

對於更少的代碼,你可以使用這個:

 <div ng-app="organHome"> 
     <dl class="sub-nav" ng-controller="inModalSwitchCtrl" ng-init="content=true"> 
      <dd ng-class="{'bold':content}"><a ng-click="content=true">Contents</a></dd> 
      <dd ng-class="{'bold': !comment}"><a ng-click="content=false">Comments</a></dd> 
     </dl> 
    </div> 

DEMO

+0

我可以問一個像ng-init =「content = true」這樣的文字是否正常工作? –

+0

您希望爲此活動減少代碼。我可以做到 –

+0

謝謝Nitish !!!!有用! –

0

爲納克級的簡化語法是{值:表達式}所以,你的代碼應該是這樣的:

<dd ng-class="{bold:content}"><a ng-click="switchContent()" ng-model="content">Contents</a></dd> 
<dd ng-class="{bold:comment}"><a ng-model="comment" ng-click="switchComment()">Comments</a></dd> 

你也應該選擇「無包裝」。在你的情況下,角度甚至沒有開始。

這裏是工作提琴 - http://jsfiddle.net/qHkWA/3/

也爲更好地瞭解這項工作,你可以看看這個線程 - What is the best way to conditionally apply a class?

而且我不知道是不是適合你的目的,但你可以簡化整個使用jQuery的toggleClass你的代碼 - http://jsfiddle.net/8kgMZ/3/

<dd class="bold"><a ng-click="toggleBold()">Contents</a></dd> 
<dd><a ng-click="toggleBold()">Comments</a></dd> 

和控制器:

.controller('inModalSwitchCtrl', function ($scope) { 
     $scope.toggleBold = function() { 
      angular.element(document).find('dd').toggleClass('bold'); 
     }; 
+0

當你說「無包裹頭」時,你指的是jsfiddle設置,對嗎?當我嘗試你的示例時,我沒有看到它的工作。 – JeffryHouser

+0

當你點擊那個文本時它改變了類,不是嗎? – SET

+0

你是對的;我立場糾正。我現在看到它。 – JeffryHouser