2015-01-12 86 views
0

在下面的代码中,当我单击span时,新的movesNumber值在视图上更新,但当从方法newMove()被调用时gameCtrl作用域中的movesNumber的值将递增,但在视图中不会更新。从指令调用控制器的方法时,AngularJS:绑定不起作用

我想有一些具体的绑定,当一个控制器的范围从指令调用,但我不知道如何。

这里是我的HTML:

<section ng-controller="gameCtrl" ng-show="gameIsVisible"> 

    <span ng-click="newMove()">{{ movesNumber }}/{{ maxRightMovesNumber }}</span> 

    <block ng-repeat="block in game[selectedChapter].levels[selectedLevel].blocks"></block> 

</section> 

这里是我的控制器:

app.controller(
    'gameCtrl', 
    [ 
    '$scope', '$rootScope', '$document', 'localStorage', 
    function ($scope, $rootScope, $document, localStorage) 
    { 
     $scope.newMove = function() 
     { 
     $scope.movesNumber ++; 
     }; 
    } 
    ] 
); 

这里是我的指令:

app.directive(
    'block', 
    [ 
    "$rootScope", "$document", 
    function($rootScope, $document) 
    { 
     function link(scope, element, attributes) 
     { 
     if(scope.block.isDroppable) 
     { 
      $document.on('blockDropped', checkDroppedElement); 
     } 

     function checkDroppedElement(event) 
     { 
      scope.$parent.newMove(); 
     } 
     } 

     return { 
     restrict: 'E', 
     template: '{{ block.value }}', 
     link:  link 
     }; 
    } 
    ] 
); 
+0

你不需要做$父,因为它们共享相同的范围 – Bazinga

+0

@JsIsAwesome没有,有也ngRepeat。 – dfsq

+0

那又如何?我不明白 – Bazinga

回答

2

外部DOM事件超出角$消化loop:

$document.on('blockDropped', checkDroppedElement); 

您需要手动$适用于:

function checkDroppedElement(event) { 
     scope.$parent.$apply(function() { 
      scope.$parent.newMove(); 
     }); 
} 
相关问题