如何在angular.js中将变量从指令绑定到控制器?

时间:2014-09-29 18:56:55

标签: javascript angularjs

我使用dateDisable变量来隐藏div date-warp,按钮'添加一个',可以将dateDisable变量值更改为False ,但按钮'添加日期'无法将变量更改为True。我怎样才能让代码工作?谢谢。

HTML

<div ng-controller="addDateControl">
  <a href="#" ng-click="showDate($event)">add one</a>
  <div clss="date-warp" ng-hide="dateDisable">
    <a href="#" vote-select-list>add date</a>
  </div>
</div>

JS

var app = angular.module('GroupApp',[]);
app.controller('addDateControl',
    function ($scope) {
    $scope.dateDisable = true;

    $scope.showDate = function ($event) {
      $event.preventDefault();
      $scope.dateDisable = !$scope.dateDisable;
    };
  })
  .directive('voteSelectList', [ function () {
    return {
      restrict: 'A',
      link: function (scope, iElement, iAttrs) {
        iElement.bind('click', function(event) {
          event.preventDefault();
        });
      }
    };
  }]);

2 个答案:

答案 0 :(得分:0)

你介意把问题放在Plunker吗?

一旦你这样做,我们就可以自由地使用代码。我从高层看到了两个错误。

  • <div clss="date-warp" ng-hide="dateDisable">您的班级名称缺少&#34; a&#34;
  • 在你的指令中,link函数有3个属性,它们通常都非常严格。您目前正在使用(scope, iElement, iAttrs)(scope, element, attrs)

从高层来看,这些可能没有做任何事情,但它们很可能是导致错误的原因。有关自定义指令属性的更多信息,请查看AngularJS文档here

希望有所帮助!祝你好运!

答案 1 :(得分:0)

你应该可以在你的指令中做一些事情,比如

scope.$emit("addedDate");
scope.$apply();

在点击装订中,在控制器中执行类似

的操作
$scope.$on("addedDate", function(){
  $scope.dateDisable = true;
});