【发布时间】:2015-02-26 06:23:37
【问题描述】:
我正在尝试从指令调用函数并传递参数。回调函数被传递到隔离范围。我有两个问题。首先,当嵌套在 ng-repeat 中时,这根本不起作用;其次,即使不在 ng-repeat 中,我也不知道如何将参数传递给回调函数。这是一个显示问题的 plunker:http://plnkr.co/edit/3FN0o3UE99wsmUpxMe4x?p=preview
请注意,当您单击“This works”时,它至少会从父作用域执行该函数,但是当单击其他作用域时,它什么也不做(因为它们在 ng-repeat 中)。这是第一个问题。
第二个问题是当你点击“This works”时,即使它成功调用了该函数,我也无法弄清楚如何从指令范围传递用户(注意它警告未定义)。
这是一个示例指令(从我的实际应用程序中大大简化):
var app = angular.module('plunker', []);
app.controller("AppCtrl", function($scope) {
$scope.click = function(user) {
alert(user)
}
$scope.users = [{
name: 'John',
id: 1
}, {
name: 'anonymous'
}];
});
app.directive("myDir", function($compile) {
return {
scope: {
user: '=',
click: '&'
},
compile: function(el) {
el.removeAttr('my-dir');
el.attr('ng-click', 'click(user)')
var fn = $compile(el);
return function(scope, el){
fn(scope);
};
}
};
});
这里是html:
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="angular.js@1.2.x" src="http://code.angularjs.org/1.2.12/angular.js" data-semver="1.2.12"></script>
<script src="app.js"></script>
</head>
<body>
<div ng-controller="AppCtrl">
<a my-dir user="{name: 'Works', id: 0}" click="click()">This works</a>
<a my-dir user="user" click="click()" ng-repeat="user in users"><br>{{user.name}}</a>
</div>
</body>
</html>
谢谢!
【问题讨论】:
标签: angularjs angularjs-directive angularjs-ng-repeat