gpt4 book ai didi

angularjs - 如何检查 AngularJS 中是否指定了指令的方法参数?

转载 作者:行者123 更新时间:2023-12-03 07:13:20 24 4
gpt4 key购买 nike

我创建了一个包含按钮的自定义指令。此按钮从“callback”属性指定的父范围调用方法。

<!DOCTYPE html>
<html ng-app="app">
<head>
<title>Simple directive</title>

<script src="js/lib/angular/angular.js"></script>

<script type="text/javascript">
var app = angular.module('app', []);

app.controller('TestController', function($scope) {

$scope.doSomething = function(param) {
alert('Something called with: ' + param);
}
})

app.directive('myDirective', function() {
var ret = {
restrict: 'E',
scope: {
user: '@',
callback: '&' // bound a function from the scope
},
template: '<div>Hello {{user}}<button ng-show="hasCallback()" ng-click="callback({userData: user})">Callback</button>',
controller: function($scope) {
$scope.hasCallback2 = function() {
var t = typeof $scope.callback;
return t == 'function';
}

$scope.hasCallback = function() {
return angular.isDefined($scope.callback);
}
}
};
return ret;
});

</script>
</head>

<body ng-controller="TestController">

<my-directive user="cat" callback="doSomething(userData)"></my-directive>
<my-directive user="dog" callback="doSomething(userData)"></my-directive>
<my-directive user="pig"></my-directive>

</body>

</html>

我的问题是:

如何控制模板内按钮的可见性?如果自定义标记中未指定回调属性,我想隐藏它(请参阅第三个 my-directive 标记)。当我检查回调的 typeof 时,我总是得到“function”,并且 angular.isDefined(...) 也返回 true。

最佳答案

使用“&?”如果尚未设置该属性,则返回未定义。

'&' = 回调函数始终被定义。

'&?' = 仅当在 html 模板中定义属性时才定义回调函数。

bindToController: {
callback: '&?'
},
controller: function() {
if (this.callback === undefined) {
// attribute "callback" was not defined
}
}

注意:适用于 Angular 1.4.8。我不确定它是否适用于旧版本。

关于angularjs - 如何检查 AngularJS 中是否指定了指令的方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21935099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com