gpt4 book ai didi

javascript - 具有函数绑定(bind)的 Angular 日期选择器指令

转载 作者:行者123 更新时间:2023-12-02 14:08:16 35 4
gpt4 key购买 nike

我是 Angular 初学者。请帮我修复this plunk

我尝试仅对 Controller 中的 jquery UI datepicker 小部件的 onSelect 回调使用一个回调,而不是在每个指令中重复回调函数(是的,为了实验,我确实有多个指令)。

但我收到此错误

Uncaught TypeError: Cannot use 'in' operator to search for 'onSelect' in 19/10/2016

这是我的代码

HTML

<html ng-app="myApp">
<head>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.0/themes/smoothness/jquery-ui.css"/>
<script src="https://code.jquery.com/jquery-3.1.1.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.js"></script>
<script src="script.js"></script>
</head>
<body ng-controller="myController">
<input type="text" my-datepicker ng-model="date" date="date" on-select="onSelect()"/>
<input type="button" ng-click="submitDate()" value="Submit"/>
</body>
</html>

JS

var app = angular.module('myApp', []);
app.controller('myController', ['$scope', function($scope){
$scope.date = "frommyController";
$scope.submitDate = function(){
console.log($scope.date);
};
$scope.onSelect = function(value, picker){
scope.date = value;
scope.$parent.$digest();
}
}]);
app.directive('myDatepicker', function(){
return {
scope: {
date: "=",
onSubmit: "&onSelect"
},
restrict: 'EA',
require: "ngModel",
link: function(scope, element, attributes, modelController){
scope.date = "fromdirevtive";
element.datepicker({
changeMonth: true,
changeYear: true,
dateFormat: "dd/mm/yy",
onSelect: scope.onSubmit
});
}
}
})

有人可以帮助我理解我在这里做错了什么吗?

最佳答案

我使用你的 plunkr 创建了一个新的 plunkr。引用这个plunker寻求解决方案。

您的 plunkr 发现的问题:

  1. index.html 中的方法签名不正确。
  2. 在 Angular 指令中使用 & 绑定(bind)调用回调的方式。

我刚刚纠正了上述问题。另外,我没有使用链接函数,而是使用了指令的 Controller ,因为它在与指令的交互方面给了我更多的控制权。

在 Angular 指令中调用回调的正确方法是传递一个对象作为参数。对象的键应该是回调函数的参数。引用app.js第27行

Code - app.js

var app = angular.module('myApp', []);
app.controller('myController', ['$scope',
function($scope) {
$scope.date = "frommyController";
$scope.submitDate = function() {
console.log($scope.date);
};
$scope.onSelect = function(value, picker) {
console.log(value);
console.log(picker);
$scope.date = value;
$scope.$parent.$digest();

}
}
]);
app.directive('myDatepicker', function() {
return {
scope: {
date: "<",
onSelect: "&"
},
restrict: 'EA',
require: "ngModel",
controller: function($scope, $element) {
vm = this;
vm.$scope = $scope;
vm.onSelect = function(value, picker) {
vm.$scope.onSelect({
value: value,
picker: picker
})
}

$element.datepicker({
changeMonth: true,
changeYear: true,
dateFormat: "dd/mm/yy",
onSelect: vm.onSelect
});

}
}
})


<html ng-app="myApp">

<head>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.0/themes/smoothness/jquery-ui.css" />
<script src="https://code.jquery.com/jquery-3.1.1.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.js"></script>
<script src="app.js"></script>
</head>

<body ng-controller="myController">
<input type="text" my-datepicker ng-model="date" date="date" on-select="onSelect(value,picker)" />
<input type="button" ng-click="submitDate()" value="Submit" />
</body>

</html>

关于javascript - 具有函数绑定(bind)的 Angular 日期选择器指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39871046/

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