Javascript 为什么单击不工作?

Javascript 为什么单击不工作?,javascript,angularjs,angularjs-directive,angularjs-ng-click,Javascript,Angularjs,Angularjs Directive,Angularjs Ng Click,我写了一个指令impl ng disabled,因为我可以使用angularjs,它的版本是1.1.5,它没有提供ng disabled,所以 tableApp.directive('myDisabled', function($compile) { return { restrict: 'A', replace: true, scope: { myDisabled: '=' }, link: function(scope, element, attrs) {

我写了一个指令impl ng disabled,因为我可以使用angularjs,它的版本是1.1.5,它没有提供ng disabled,所以

tableApp.directive('myDisabled', function($compile) {
return {
  restrict: 'A',
  replace: true,
  scope: {
    myDisabled: '='
  },
  link: function(scope, element, attrs) {
    var test = scope.$eval(attrs.myDisabled);
    console.log(test);
    scope.$watch(attrs.myDisabled, function (test) {
      if (test) {
        element.attr();
      }
      else {
        element.attr('disabled', 'false');
      }
    });
  }
};
});
html代码:

<html ng-app="tableApp">
  <head></head>
  <body>
    <div ng-controller="TableCtrl">
      <input ng-model="page"/>
      <button class="btn btn-primary" ng-click="previouspage()" my-disabled="page <=1">上一页</button>
    </div>
 </body>
</html>

您的问题与
$scope
有关

在指令中显式创建隔离作用域时(使用作用域:{}),不能直接访问父作用域。如果你不这样做,那么这样做没有问题

因此,简而言之,只需将HTML模板中的
ng click=“previouspage()”
更改为
ng click=“$parent.previouspage()”

相关的plunker在这里:

您还可以重构指令的
链接
函数并删除不必要的属性。因此,指令可以是:

app.directive('myDisabled', function () {
  return {
    restrict: 'A',
    scope: {
      myDisabled: '='
    },
    link: function(scope, element) {
      scope.$watch('myDisabled', function (val) {
        element.attr('disabled', val);
      });
    }
  };
});

问题在于指令
范围
。您尝试从父范围(控制器范围)访问
范围
变量

如果您为指令禁用隔离
范围
,它将起作用

例如:

tableApp.directive('myDisabled', function($compile) {
return {
  restrict: 'A',
  replace: true,
  scope: {
    myDisabled: '='
  },
  link: function(scope, element, attrs) {
    var test = scope.$eval(attrs.myDisabled);
    console.log(test);
    scope.$watch(attrs.myDisabled, function (test) {
      if (test) {
        element.attr();
      }
      else {
        element.attr('disabled', 'false');
      }
    });
  }
};
});

如何在
控制器
作用域中声明
previouspage()
?是的,我在控制器`$scope.previouspage=函数previouspage(){$scope.page-=1;$scope.getCr();}`你能从你的标记中提供更多的细节或者创建一个提琴吗?$scope.page的初始值是多少?好的,我展示我的所有angularjs编解码器!但这是一个新问题。为什么页面大于1,但按钮也被禁用?我对我的plunker进行了一些改进,也许它可以帮助你解决这个问题?按钮仅在页面打开时禁用
tableApp.directive('myDisabled', function($compile) {
return {
  restrict: 'A',
  replace: true,
  scope: {
    myDisabled: '='
  },
  link: function(scope, element, attrs) {
    var test = scope.$eval(attrs.myDisabled);
    console.log(test);
    scope.$watch(attrs.myDisabled, function (test) {
      if (test) {
        element.attr();
      }
      else {
        element.attr('disabled', 'false');
      }
    });
  }
};
});