2

angular.js私はコントローラーを書いていた今日から始めたばかりです:

myApp.controller('RepetitionController', ['$scope', '$location', 'repetitionService',
    function ($scope, $location, repetitionService) {



        $scope.questions = repetitionService.getQuestions();
        $scope.questionsLeft = $scope.questions.length;
        $scope.questionsAnswered = 0;
        $scope.percentageLeft = ($scope.questionsLeft == 0 ? 100 : 0);
        $scope.repetitonState = ??? 
        $scope.endRepetition = function () {
            repetitionService.clearSelectedSets();
            $location.path("/setsAndCollections");
        }

        $scope.submitAnswer = function () {
            alert("alert");
        }
    }]);

私は疑問に思い始めました。

三項演算子を使用して の初期状態を作成したことがわかります$scope。今、私のrepetitionStateフィールドでは、このようなものが必要です(questionsLeft === 0 ? 'finished' : questions[0].type)

オブジェクトにデータを入力した後に呼び出される関数、$scopeある種のポストコンストラクターを定義する方法はありますか?

または、関数を「監視」する方法があるので、次のように書くことができます

$scope.repetitionState = function(){
    ///logic here
};

私は書く必要がある状況があるのではないかと心配しています.logicalExpression ? anonymousFunction () : someOtherAnonymousFunction()私にとって、これらすべての無名関数をネストすることは(今のところ)読みにくいangularです.このような状況で。

4

2 に答える 2

4

あなたは間違いなく機能を見ることができます。$watch文字列または関数のいずれかを watchExpression パラメータとして受け入れます。関数を使用している場合、現在のスコープが最初の引数としてその関数に渡されます。

覚えておくべき重要なことは、watchExpression 関数は冪等でなければならないということです。そのため、必ずリスナー関数のスコープのみを更新してください。

$scope.repititionState = getRepititionState($scope);

$scope.$watch(getRepititionState, function(newVal, oldVal, scope) {
    scope.renditionState = newVal;
});

function getRepititionState(scope) {
    var repititionState;
    // your logic here, just remember to set and return repititionState
    return repititionState;
}
于 2013-04-06T22:25:59.953 に答える