指令如何使用某些参数从 Controller 调用函数?
我会将变量 myVar 赋予作用域。$apply(attrs.whattodo);
HTML:
<div ng-app="component">
<div ng-controller="ctrl">
<span ng-repeat="i in myarray">
<span customattr whattodo="addVal">{{i}}</span>
</span>
</div>
Controller JS:
function ctrl($scope) {
$scope.myarray = [1];
$scope.addVal = function (value) {
$scope.myarray.push(value);
}
}
指令 JS:
angular.module('component', []).directive('customattr', function () {
return {
restrict: 'A',
link: function (scope, element, attrs) {
var myVar = 5;
scope.$apply(attrs.whattodo);
}
};
});
最佳答案
这是其中一种工作方法:
您必须在作用域中将此属性绑定(bind)为具有函数类型的作用域模型。因此,当您需要其他(指令)sope时,您可以执行此操作
HTML
<body ng-controller="MainCtrl">
Value: {{value}}!
<button customattr whattodo="addValue">Add</button>
</body>
JS
angular.module('component', [])
.controller('MainCtrl', function($scope) {
$scope.value = 1;
$scope.addValue = function(val){
alert(val);
$scope.value = val;
}
});
.directive('customattr', function () {
return {
restrict: 'A',
scope: {
whattodo: "=" // or ' someOtherScopeName: "=whattodo" '
},
link: function (scope, element, attrs) {
var myVar = 5;
scope.whattodo(myVar); // or ' scope.someOtherScopeName(myVar) '
}
};
});
= or =attr - set up bi-directional binding between a local scope property and the parent scope property of name defined via the value of the attr attribute. If no attr name is specified then the attribute name is assumed to be the same as the local name. Given and widget definition of scope: { localModel:'=myAttr' }, then widget scope property localModel will reflect the value of parentModel on the parent scope. Any changes to parentModel will be reflected in localModel and any changes in localModel will reflect in parentModel
关于javascript - 从带参数的指令调用 Controller 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16135711/