내가 타이머와 함께 단일 페이지 응용 프로그램을 구축하고, 2 개 버튼 :NG 쇼 지침
- 1 하나 (onBreak = false)를 초기 상태에 표시됩니다 및 핸들 25 분 타이머는
- 2 일 제 1 회 타이머가 이상 (onBreak = TRUE) 일 때 나타납니다, 그리고 5 분 타이머 여기
을 처리하는 HTML입니다 :
<h1>{{ home.time | formattime }}</h1>
<button type="button" class="btn btn-primary" ng-hide="onBreak"
ng-click="home.workTimer()" ng-bind="home.startOrResetWork">
</button>
<button type="button" class="btn btn-primary" ng-show="onBreak"
ng-click="home.breakTimer()" ng-bind="home.startOrResetBreak">
</button>
,
컨트롤러 : 제 카운트가 끝나면
(function() {
function HomeCtrl($interval) {
var $ctrl = this;
var promise;
$ctrl.time = 1500;
$ctrl.startOrResetWork = "START WORK";
$ctrl.startOrResetBreak = "START BREAK";
$ctrl.onBreak = false;
$ctrl.stopTimer = function() {
$interval.cancel(promise);
};
$ctrl.startTimer = function() {
promise = $interval(function() {$ctrl.time--;}, 1000, [$ctrl.time]);
};
$ctrl.workTimer = function() {
($ctrl.startOrResetWork === "START WORK") ? $ctrl.startOrResetWork = "RESET" : $ctrl.startOrResetWork = "START WORK";
if ($ctrl.startOrResetWork === "START WORK") {
$ctrl.stopTimer();
$ctrl.time = 1500;
} else if ($ctrl.startOrResetWork === "RESET") {
$ctrl.startTimer();
promise.then(function() {
$scope.onBreak = true;
});
}
};
$ctrl.breakTimer = function() {};
}
angular
.module('pomodoroManager')
.controller('HomeCtrl', ['$interval', HomeCtrl]);
})();
및 기본적
(function() {
function config($locationProvider, $stateProvider) {
$locationProvider
.html5Mode({
enabled: true,
requireBase: false
});
$stateProvider
.state('home', {
url: '/',
controller: 'HomeCtrl as home',
templateUrl: '/templates/home.html'
});
}
angular
.module('pomodoroManager', ['ui.router', 'ui.bootstrap', 'firebase'])
.config(config);
})();
을 app.js (promise.then (...)), I는해야 true로 설정 onBreak ng-show 지시문을 사용하여 두 번째 버튼을 표시하십시오.
문제가 있습니까? 그렇지 않습니다. ng-inspector를 사용하면 onBreak가 true라는 것을 알 수 있지만 두 번째 버튼이 아닌 첫 번째 버튼을 계속 볼 수 있습니다.
기타 문제 : 다음 할
$ctrl.toggleOnBreak = function() {
$ctrl.onBreak = true;
};
: 하자 내가 함수를 작성 말을 더 악화
promise.then($ctrl.toggleOnBreak());
나는 여전히 올바른 버튼 동작을하지 않으며, onBreak GET 타이머가 끝났을 때 대신 클릭 할 때 true로 설정하십시오.
도움말 제발 ... 너무 오래되었습니다. 붙어 있습니다.
onBreak는 $ ctrl 필드입니다. 그러나 HTML은 onBreak를 사용하므로 필드가 $ scope에 있어야합니다. –
좋아. Angular에 비교적 익숙하지 않아 $ scope를 사용하는 방법을 잘 모릅니다. 컨트롤러 함수에서 전달하면 TypeError : $ interval이 함수가 아닙니다. –
컨트롤러를 인스턴스화하는 HTML을 포함하도록 질문을 편집하십시오. JS에서는'$ ctrl'을 사용하고 HTML에서는'home '을 사용하는 것은 독자에게 혼란을줍니다. – georgeawg