简体   繁体   中英

Angular UI directive inside custom directive

Similar question but the question isn't sufficiently answered

In the following code, why doesn't uib-datepicker-popup turn into an angular UI date picker?

Am I missing some flag/compile option for the directive?

This is a stripped down example of the datepicker-popup example in the Angular-UI documentation, modified to be inside a directive. Notice how it works when used with the controller but doesn't work in my example with the directive.

 angular.module('ui.bootstrap.demo', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']); angular.module('ui.bootstrap.demo').directive('timeScale',()=>({ template: ` <h1>Scope:</h1> <ul> <li>format: {{format}}</li> <li>dt: {{dt}}</li> <li>popup: {{popup}}</li> <li>dateOptions: {{dateOptions}}</li> </ul> <input type="text" class="form-control" uib-datepicker-popup="{{format}}" ng-model="dt" is-open="popup.opened" datepicker-options="dateOptions" ng-required="true" close-text="Close"/> `, link: $scope => { $scope.format = 'dd-MMMM-yyyy' $scope.dt = null; $scope.popup = { openend: false }; $scope.dateOptions = { dateDisabled: false, formatYear: 'yy', maxDate: new Date(2020, 5, 22), minDate: new Date(), startingDay: 1 } } }));
 <body ng-app="ui.bootstrap.demo"> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-animate.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-sanitize.js"></script> <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.5.0.js"></script> <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <time-scale></time-scale> </body>

Yes, its possible to use the directive inside a directive. I have modified your code. And its working, please check.

 angular.module('ui.bootstrap.demo', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']); angular.module('ui.bootstrap.demo').directive('timeScale',()=>({ template: ` <h1>Scope:</h1> <ul> <li>format: {{format}}</li> <li>dt: {{dt}}</li> <li>popup: {{popup}}</li> <li>dateOptions: {{dateOptions}}</li> </ul> <input uib-datepicker-popup="{{format}}" type="text" class="form-control" ng-model="dt" is-open="popup.opened" datepicker-options="dateOptions" ng-required="true" close-text="Close" ng-click="open()" /> `, link: $scope => { $scope.format = 'dd-MMMM-yyyy' $scope.dt = null; $scope.popup = { openend: false }; $scope.open = function() { $scope.popup.opened = true; } $scope.dateOptions = { dateDisabled: false, formatYear: 'yy', maxDate: new Date(2020, 5, 22), minDate: new Date(), startingDay: 1 } } }));
 <body ng-app="ui.bootstrap.demo"> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-animate.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-sanitize.js"></script> <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.5.0.js"></script> <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <time-scale></time-scale> </body>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM