我正在尝试将一个参数传递给一个函数,在一个指令链接函数中,类似于这个问题: Angular: calling controller function inside a directive link function using &
然而,虽然我看过一些例子,比如这个例子:Passing Parameters from a Directive to a function我看到一个参数值在指令内的链接里面设置。然而,我没有看到你传递一个原语的任何地方,就像一个数字作为指令的参数,将其传递给控制器函数。
我尝试过多种方法,但还没有想出语法。
HTML CODE:
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@1.4.2" data-semver="1.4.2" src="https://code.angularjs.org/1.4.2/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
<div id="app" ng-app="app">
<div ng-controller="mainCtrl">
<my-directive ctrl-fn="ctrlFn(count)"></my-directive>
</div>
</div>
</body>
</html>
的script.js
var app = angular.module('app', []);
app.controller("mainCtrl", function($scope) {
$scope.count = 0;
$scope.ctrlFn = function() {
$scope.count = 0;
console.log('In mainCtrl ctrlFn!');
$scope.count += count;
// console.log("count is: " + JSON.stringify($scope.count));
//Call service here
};
})
.directive('myDirective', function() {
return {
restrict: 'E',
scope: {
'count' : '&',
'ctrlFn' : '&'
},
template: "<div><button ng-click='ctrlFn({count: 10})'>Click Here</button></div>",
link: function(scope, element, attributes) {
var count = null;
scope.ctrlFn = scope.ctrlFn({count: count});
//scope.text = scope.fn({ count: 0 });
}
};
});
我的傻瓜在这里:http://plnkr.co/edit/6uDntNeqe0g343PmeCED?p=preview
在这个用例中,原语是否可以作为参数传入?如果是的话,我在这里错过了什么?
后果:
如果有人在angularjs文档中查找此语法:ctrlFn({count: 10})
,则会在自定义指令下提及:
通常需要通过分离范围传递数据 表达式到父作用域,这可以通过传递一个映射来完成 将局部变量名和值放入表达式包装函数中。 例如,hideDialog函数会在何时显示消息 对话框已隐藏。这是在指令中通过调用指定的 关闭({message:'现在关闭'})。然后是局部变量消息 将在近场表达中提供。
答案 0 :(得分:2)
你犯了两个错误:
scope.ctrlFn = scope.ctrlFn({count: count});
-
此行重写对函数的传递引用,并将其设置为此函数返回的值(在这种情况下为undefined
)
要将count
值传递给您的指示,您应该使用=
代替&
以下是简化示例的代码。
的script.js:
var app = angular.module('app', []);
app.controller("mainCtrl", function($scope) {
$scope.count = 0;
$scope.ctrlFn = function(count) {
console.log(count)
console.log('In mainCtrl ctrlFn!', count);
$scope.count += count;
//Call service here
};
})
.directive('myDirective', function() {
return {
restrict: 'E',
scope: {
'count' : '=',
'ctrlFn' : '&'
},
template: "<div><button ng-click='ctrlFn({ count: 100 })'>Click Here</button></div>"
};
})
的index.html:
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@1.4.2" data-semver="1.4.2" src="https://code.angularjs.org/1.4.2/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
<div id="app" ng-app="app">
<div ng-controller="mainCtrl"> {{count}}
<my-directive ctrl-fn="ctrlFn(count)"></my-directive>
</div>
</div>
</body>
</html>