Измените текст кнопки при нажатии angular JS

Как я могу изменить текст кнопки при нажатии кнопки.

Вот что я пробовал.

HTML:

<button ng-click="toggle = !toggle">Toggle!</button>
<div class="box on" ng-show="toggle" ng-animate="'box'">On</div>

JS:

function MainController($scope) {
  $scope.toggle = true;
}

Ответы

Ответ 1

Я думаю, использование часов toggle должно сделать это

<button ng-click="toggle = !toggle">{{toggleText}}</button>
<div class="box on" ng-show="toggle" ng-animate="'box'">On</div>

затем

app.controller('AppController', function ($scope) {
    $scope.toggle = true;

    $scope.$watch('toggle', function(){
        $scope.toggleText = $scope.toggle ? 'Toggle!' : 'some text';
    })
})

Демо: Fiddle

Ответ 2

Или сохраните весь контент в своем HTML, а не определяйте текст кнопки в контроллере, если хотите:

<button ng-click="toggle = !toggle">
    <span ng-show="toggle">Toggle to Off</span>
    <span ng-hide="toggle">Toggle to On</span>
</button>
<div class="box on" ng-show="toggle" ng-animate="'box'">On</div>

Ответ 3

Я бы не использовал ни часы, ни ng-show из-за их производительности. Это просто, как это:

app.controller('AppController', function ($scope) {
    $scope.toggle = true;
})

<button ng-click="toggle = !toggle">{{toggle && 'Toggle!' || 'some text'}}</button>

Ответ 4

Здесь мое решение, поддерживающее перевод:

HTML:

<span class="togglebutton">
    <label>
        <input type="checkbox" checked="{{myApp.enabled}}"
               ng-model="myApp.enabled" ng-click="toggleEnabled()">
        <span translate="{{myApp.enableCaption}}">Is Enabled?</span>
    </label>
</span>

JS - контроллер:

$scope.toggleEnabled = function() {
    $scope.myApp.enableCaption = $scope.myApp.enabled ? 'global.enabled' : 'global.disabled';
};

где global.enabled и global.disabled относятся к переводам i18n JSON. Вам также необходимо инициализировать enableCaption в JS, где вы создаете пустой объект.