How to set the dynamic controller for directives?

前端 未结 3 1045
无人共我
无人共我 2020-11-28 10:46

Talk is cheap, show my codes first:

HTML:

directive:

angular.modul         


        
3条回答
  •  不知归路
    2020-11-28 11:13

    This is how it is done:

    Inside your directive element all you need is an attribute which gives you access to the name of the controller: in my case my card attribute holds a card object which has a name property. In the directive you set the isolate scope to:

    scope: { card: '=' } 
    

    This isolates and interpolates the card object to the directive scope. You then set the directive template to:

    template: '',

    this looks to the directive's controller for a function named getTemplateUrl and allows you to set the templateUrl dynamically as well. In the directive controller the getTemplateUrl function looks like this:

    controller: ['$scope', '$attrs', function ($scope, $attrs) { 
        $scope.getTemplateUrl = function () { return '/View/Card?cardName=' + 
            $scope.card.name; }; }],
    

    I have an mvc controller which links up the proper .cshtml file and handles security when this route is hit, but this would work with a regular angular route as well. In the .cshtml/html file you set up your dynamic controller by simply putting as the root element. The controller will differ for each template. This creates a hierarchy of controllers which allows you to apply additional logic to all cards in general, and then specific logic to each individual card. I still have to figure out how I'm going to handle my services but this approach allows you to create a dynamic templateUrl and dynamic controller for a directive using an ng-repeat based on the controller name alone. It is a very clean way of accomplishing this functionality and it is all self-contained.

提交回复
热议问题