非控制器ng-click函数在指令中不起作用
Non-controller ng-click function not working in directive
这是对我实际问题的简化。
当按钮被点击时,它的父对象将有一个红色背景。该函数不是控制器函数,它只是一个简单的视图。当按钮不在指令中时,这将按预期工作。然而,当在指令中使用时,它不起作用。我知道这是一个范围问题,也是一个简单的解决方案,但我是个傻瓜。
我看到过类似问题的解决方案,但所有这些都是基于控制器的点击功能。
下面是一个plunker:http://plnkr.co/edit/NZPSejy6vh2n4gYETHuX?p=preview
有角度的东西:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.boxes = [
{
id: 1
},
{
id: 2
},
{
id: 3
}
];
});
app.directive('box', function() {
return {
templateUrl: 'box.html',
scope:{
makeRed: '@'
}
};
});
视图:
<body ng-controller="MainCtrl">
<div class="box-wrapper" ng-repeat="box in boxes" ng-class="{redbox: isRed}">
<box
make-red="isRed = !isRed"
>
</box>
</div>
</body>
指令模板:
<div class="box">{{$index + 1}}</div>
<button ng-click="{{makeRed}}">Click me</button>
样式:
.box {
width: 100px;
height: 50px;
padding: 10px;
border: 2px solid black;
text-align: center;
font-size: 30px;
background-color: white;
}
.box-wrapper {
width: 150px;
height: 100px;
padding: 20px;
border: 2px solid blue;
margin-bottom: 20px;
}
.redbox {
background-color: red;
}
你说得对,这是一个范围问题。
要使用与父级相同的作用域,必须在指令中将作用域设置为false,如下所示:scope: false
。
由于您访问了父对象的作用域,因此也可以对其进行修改
<div class="box">{{$index + 1}}</div>
<button ng-click="isRed = !isRed">Click me</button>
编辑
建议使用CCD_ 2同样有效。
指令名为:
scope: {
makeRed: '='
}
指令的初始化:
<box make-red="isRed"></box>
以及指令模板:
<div class="box">{{$index + 1}}</div>
<button ng-click="makeRed = !makeRed">Click me</button>
工作柱塞:http://plnkr.co/edit/EReOf4NMZ2IpMjRnIRVN?p=preview
问题是您试图从指令中计算父级中的表达式。
您当前正在使用具有隔离作用域的@
。这是从父指令到指令的单向绑定。
要传递表达式,您将使用&
工作柱塞http://plnkr.co/edit/2LWeSiOmjNwMmgPwL7P5?p=preview
Angular$编译文档。
相关文章:
- 新的自定义角度指令不起作用
- AngularJS,自定义指令不起作用@ plnkr
- AngularJS + Coffeescript - 'Hello World' 指令不起作用
- 使用 $provide 重命名第三方角度指令 - 不起作用
- 带有指令不起作用的 AngularJS 动态表单字段 ID
- AngularJS:双向数据绑定 - 带有ng重复的指令 - 不起作用
- 为什么我在 AngularJs 中的指令不起作用
- 剑道指令不起作用
- ng-单击指令不起作用
- 为什么这个 angularjs 指令不起作用
- 角度引导添加新指令不起作用
- AngularJS + Facebook喜欢指令不起作用
- 带有 ngModel 绑定的 AngularJS 自定义指令不起作用
- Angularjs 指令不起作用“意外令牌”
- jQuery插件中的Angular指令不起作用
- 可重复使用的按钮指令不起作用
- Angular JS自定义指令不起作用
- 带有编译函数和ng-show的角度对话框指令不起作用
- 一个元素上的多个指令不起作用
- AngularJS:drag-n-drop指令不起作用