2016-04-16 9 views
0

Meine Anweisung funktioniert gut, aber ich möchte es in ng-click verwenden, aber die Funktion innerhalb Link kann nicht ausgelöst werden.Angularjs Direktive Link Call-Funktion in NG-Klick

http://jsfiddle.net/ovzyro1f/

<div ng-app="editer" ng-controller="myCtrl" class="container"> 
    <div class="parents"> 
    <div ng-repeat="item in items" class="wrap" sibs> 
     <span>{{item.name}}</span> 
     <button ng-click="">click</button> 
    </div> 
    </div> 
</div> 

JS

function myCtrl($scope) { 
    $scope.editedItem = null; 

    $scope.items = [{ 
    name: "item #1", 
    thing: "thing 1" 
    }, { 
    name: "item #2", 
    thing: "thing 2" 
    }, { 
    name: "item #3", 
    thing: "thing 3" 
    }]; 

    $scope.show = false; //ignore this line 

} 

var editer = angular.module('editer', []); 

editer.directive('sibs', function() { 
    return { 
    link: function(scope, element, attrs) { 
     element.bind('click', function() { 
     element.parent().children().addClass('unclicked'); 
     element.removeClass('unclicked'); 
     }) 

     scope.myClick = function() { 
     element.parent().children().addClass('unclicked'); 
     element.removeClass('unclicked'); 
     } 
    }, 
    } 
}); 

Ich möchte die Funktion in anrufen ng Klick sehen Sie bitte dieses http://jsfiddle.net/ovzyro1f/2/ sib entfernen div ng-repeat="item in items" class="wrap"

<button ng-click="myClick()">click</button> 
+0

Es funktioniert für mich. Ich bearbeitet Ihre JSFilddle: http://jsfiddle.net/ovzyro1f/1/ –

+0

Ja, es funktioniert, aber ich möchte die Funktion in ng-klicken Sie bitte diese http://jsfiddle.net/ovzyro1f/ 2/um sib aus 'div ng-repeat =" zu entfernen item in items "class =" wrap "' danke – olo

+0

Warum willst du 'sibs' entfernen? –

Antwort

1

Sie sollte vermeiden, das DOM wie in jQuery zu manipulieren.

In Angular denken wir anders: Es sind die Daten, die das DOM automatisch transformiert, wenn sich die Daten ändern (https://docs.angularjs.org/guide/databinding). Meistens müssen Sie die Änderungen nie manuell vornehmen.

Dabei müssen Sie in der Regel nicht die Link-Funktion verwenden. Sie können einen Controller (wie in Ihrem Beispiel) oder eine Direktive mit einem Controller (https://docs.angularjs.org/guide/directive) haben.

Endlich habe ich nur ein bisschen Ihren Controller und Ihre Vorlage geändert.

HTML

<div ng-app="editer" ng-controller="myCtrl" class="container"> 
    <div class="parents"> 
    <div ng-repeat="item in items" class="wrap" sibs> 
     <span ng-class="{ unclicked: !item.selected }">{{ item.name }}</span> 
     <button ng-click="selectItem(item)">click</button> 
    </div> 
    </div> 
</div> 

JS

function myCtrl($scope) { 

    $scope.items = [...]; 

    $scope.selectItem = function (item) { 

     // reset all the items 
     $scope.items.forEach(function (i) { 
      i.selected = false; 
     }); 

     // set the new selected item 
     item.selected = true; 
    } 

} 
+0

Dank ich weiß, dass ich auf diese Weise tun kann, ich versuche, alle Geschwister zu durchqueren, habe ich auf diese Weise versucht. – olo

+1

Ich habe meine Antwort mit einigen Erklärungen bearbeitet. Hoffe es wird dir helfen. :) –