javascript - create - ng repeat




Optionales Ausdrucksattribut in der AngularJS-Direktive (3)

Sie könnten machen, was Sie arbeiten, indem Sie Ihren $ eval-Aufruf an chaining

scope.$parent.$eval(attrs.disable);

weil Sie den Ausdruck, der in attrs.disable im übergeordneten Bereich enthalten ist, nicht den isolieren Bereich der Richtlinie auswerten müssen. Da Sie jedoch die Syntax '&' verwenden, wird der Ausdruck im übergeordneten Bereich automatisch ausgewertet. Also mach einfach folgendes:

if(angular.isDefined(attrs.disable)) {
    scope.disable();
}

Geige .

Ich habe eine benutzerdefinierte Navigationsanweisung, die ein optionales Attribut "deaktivieren" benötigt, und ich bin mir nicht sicher, ob es überhaupt möglich ist.

In meinem Hauptcontroller:

.controller('NavCtrl', ['UserResource','RoleResource'], function(UserResource,RoleResource){
      var user = UserResource.getUser();
      var roles = RoleResource.getRoles();
      UserService.init(user, roles); //????

});

In meiner Direktive:

.directive('navItem', function(){
    return{
        restrict: 'A',
        scope: {
            text: '@',
            href: '@',
            id: '@',
            disable: '&'

        },
        controller: function($scope, $element, $attrs){
            $scope.disabled = ''; //Not sure I even need a controller here
        },
        replace: true,
        link: function(scope, element, attrs){
            scope.$eval(attrs.disable);
        },
        template: '<li class="{{disabled}}"><a href="{{href}}" id="{{id}}">{{text}}</a></li>'

    }

});

In meinem HTML möchte ich so etwas tun:

<div data-nav-item text="My Text" href="/mytemplate.html" id="idx"
     disable="UserService.hasRole('ADMIN,BILLING') && someOtherFn(xxx) || ...">

Eine Möglichkeit, dasselbe zu tun, ist wie folgt: http://jsfiddle.net/fFsRr/7 .

Sie können todisableornot="rights[1]" durch Ihren Ausdruck wie todisableornot="UserService.hasRole('ADMIN,BILLING') && someOtherFn(xxx) || ..." .

Jetzt, wie Mark Rajcok sagte, wird die Eigenschaft todisableornot im übergeordneten Bereich ausgewertet, wenn Sie diese Eigenschaft aufrufen. Damit

<li ng-class="{adminRole:todisableornot()}"><a href="{{href}}" id="{{id}}">{{text}}</a></li> wendet die Klasse adminRole wenn die todisableornot Eigenschaft true (im Kontext des übergeordneten Bereichs) todisableornot .

Sie können dies testen, indem Sie $scope.rights =[true, false];


Kürzlich sah ich mich mit diesem Problem konfrontiert und stellte fest, dass ich in index.html mehrere Referenzen (Skript-Tag) der Anweisungsdatei hatte. Sobald ich diese zusätzlichen Referenzen entfernt hatte, verschwand das Problem.





angularjs-directive