Angularjs 如何从onclick指令更改控制器作用域

Angularjs 如何从onclick指令更改控制器作用域,angularjs,directive,Angularjs,Directive,这是我的指示 .directive('closeMapMessage', function($log) { 'use strict'; return function(scope, element) { var clickingCallback = function() { angular.element('.map').fadeOut("slow"); }; element.bind('click', clickingCallback); }; })

这是我的指示

.directive('closeMapMessage', function($log) {
  'use strict';
  return function(scope, element) {
    var clickingCallback = function() {
    angular.element('.map').fadeOut("slow");
    };
    element.bind('click', clickingCallback);
  };
})
如何更改控制器中的范围变量

<div class="msg-mobile" ng-show="showInstructionModal">
  <div class="close-map-msg ok-got-it-footer" close-map-message>Ok, got it. </div>
</div>

我基本上希望在调用我的close指令时设置showInstructionModalfalse。

在单击事件发生后,您应该手动运行摘要循环以更新所有范围绑定

.directive('closeMapMessage', function($log) {
  'use strict';
  return function(scope, element) {
    var clickingCallback = function() {
      angular.element('.map').fadeOut("slow");
      scope.$apply();
    };
    element.bind('click', clickingCallback);
  };
})

从当前的代码片段中,很难说为什么不使用为角度定制的模态解决方案,即

但是,在当前代码中,您将在Angular的感知之外向元素附加一个单击事件。这就是为什么在下一个$digest周期运行之前,单击元素不会生效。此外,在Agular中,通常不会以您尝试的方式使用指令。我建议更新指令以同时提供HTML,然后使用ng clickattribute通过Angular附加事件处理程序

将指令代码更新为:

.directive('closeMapMessage', function($log) {
  'use strict';
  return {
      restrict: "AE",
      link: function(scope, element) {
         scope.closeModal = function() {
             angular.element('.map').fadeOut("slow");
             scope.showInstructionModal = false; // probably need to put this in a $timeout for example to show the fading of the element
         };
      },
      template: '<div class="close-map-msg ok-got-it-footer" ng-click="closeModal()">Ok, got it.</div>'
  };
})
然后相应地更新您的HTML:

<div class="msg-mobile" ng-show="showInstructionModal">
  <close-map-message></close-map-message>
</div>

scope.showInstructionModel=false如何;适用范围:$适用;在指令的末尾?为什么不使用角度模态?或者ngClick?Anzeo DOM操作应该使用指令完成,所以他使用的指令是correct@pankajparkar这里没有DOM操作。这是一个淡出模态并关闭它的指令。这可以通过使用Angular UI的模式服务解决,也可以通过添加ng click属性和切换淡出的ng类来解决。@Anzeo I looke`Angular.element'.map``在应用淡出之前,这就是我喜欢使用指令的原因