0

<button-large color="green" click="createWorkstation()" busy="disableSave()" busyLabel="Saving...">Save</button-large>

の出力の変更を見ることができませんdisableSave()。私のディレクティブに表示されている console.log() は、.busy の出力が変更されたときにトリガーされることはありません。私は何を間違っていますか?

directive('buttonLarge', function () {
    return {
        scope: {
            busy: '&',
            click: '&'
        },
        replace: true,
        restrict: 'E',
        transclude: true,
        template: '<button class="buttonL" ng-transclude/>',
        link: function (scope, element, attrs) {

            //when the button is busy, disable the button
            if (angular.isDefined(scope.busy())) {
                scope.$watch(scope.busy(), function () {
                    console.log('watched');
                });
                attrs.$observe(scope.busy(), function () {
                    console.log('observed');
                });
            }

            //setup click event - https://groups.google.com/forum/#!topic/angular/-uVE5WJWwLA
            if (angular.isDefined(scope.click)) {
                element.bind('click', scope.click);
            }
        }
    }
})

コントローラ

$scope.newWorkstationDialog = function (workflowProcess) {
    var d = $dialog.
        dialog({
            resolve: {
                workflowProcess: function () {
                    return workflowProcess;
                }
            }
        }).
        open('/partials/admin/'+workflowProcess.entity.slug+'/setup.htm', ['$scope', 'dialog', ..., function ($scope, dialog, ...) {
            $scope.saving = false;

            /* Create the workstation */
            $scope.createWorkstation = function () {
                console.log('saving');
                $scope.saving = true;
                $timeout(function () {
                    $scope.saving = false;
                    console.log('stopped saving');
                }, 1000);
            }

            //Should the save button be disabled?
            $scope.disableSave = function () {
                return $scope.saving;//|| $scope.form.$valid;
            }

            $scope.cancel = function () {
                dialog.close();
            }
        }]);
}
4

1 に答える 1

2

監視の構文が正しくありません。内部的にスコープをアタッチする $parse サービスを内部的に使用するため、監視を行うときにスコープを使用しないでください。したがって、以下のようにコードを変更する必要があります

 1st option 

 scope.$watch(function(){
return scope.busy()
}, function (newvalue,oldvalue) {
                    console.log('watched');
                });

2nd option

scope.$watch('busy()', function (newvalue,oldvalue) {
                    console.log('watched');
                });
于 2013-07-01T17:30:58.253 に答える