Javascript 为什么单击不工作?
我写了一个指令impl ng disabled,因为我可以使用angularjs,它的版本是1.1.5,它没有提供ng disabled,所以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) {
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');
}
});
}
};
});