簡體   English   中英

angularjs指令更改名稱的格式

[英]angularjs directive to change the format of name

即使看了很多博客,我也不太明白如何編寫AngularJS指令。 基本上我有一個名為“lastname,firstname”的名字數組。 我想編寫一個指令,使其成為“firstname lastname”

我的HTML是這樣的

<div ng-repeat="names in nameArray"
    <custom-name-format> {{names}} </custom-name-format>
</div>

如何將'names'參數傳遞給指令?

控制器:

angular.module('nameApp').directive('customNameFormat', function() {

    // how do I access and manipulate {{names}} here?
});

嘗試使用filter而不是指令

這是JsFiddle鏈接

示例代碼

HTML

<div ng-app="myApp">
    <ul ng-controller="YourCtrl">
       <li ng-repeat="name in names">
           {{name.name | customNameFormat}}
        </li>
    </ul>
</div>

JS

'use strict';

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

app.controller('YourCtrl', ['$scope', function ($scope) {

    $scope.names = [
        {name:'Doe, John'},
        {name:'Naperi, Alberto'},
        {name:'Last, First'},
        {name:'Espolon, Justin'},
        {name:'Bor, Em'},
        {name:'Pik, El'},
      ];

}]);

app.filter('customNameFormat', function() {    

    return function(input) {
        var nameStr = input.split(',').reverse().join(' ');
        return nameStr;
    };

});

希望能幫助到你。

我認為你這里不需要指令。 過濾器會更合適。 您還可以傳遞參數以輕松過濾。

在HTML中:

{{ filter_expression | filter : expression : comparator}}

在JavaScript中:

$filter('filter')(array, expression, comparator)

在指令中

angular.module('nameApp').directive('customNameFormat', function() {
  return{
    scope:{
    names : '='
    },
    link: function(scope,elem,attr){
       var nameStr = scope.names //lastname, firstname
       var newNameStr = nameStr.split(',').reverse().join(' ');
       elem.html(newNameStr);

    } 

 }

})

<div ng-repeat="names in nameArray"
   <custom-name-format names="names" ></custom-name-format>
</div>

您可以為此名稱設置屬性,如下所示:

<div ng-repeat="names in nameArray">
    <custom-name-format custname="{{names}}"> {{names}} </custom-name-format>
</div>

然后在您的指令中訪問custname的名稱,如下所示:

scope: {
  custname: '@'
}

您也可以使用jquery,但是以Angular方式也可以使用屬性訪問

<div ng-repeat="names in nameArray"
    <custom-name-format custom-attr="{{name}}"> {{names}} </custom-name-format>
</div>

控制器:

angular.module('nameApp').directive('customNameFormat', function() {

     return {
        restrict: 'A',

        link: function (scope, el, attrs) {
alert(attrs.customAttr);
}
}
});

您可以使用正則表達式匹配來重新排列名稱

var parts = name.match(/(\w+), (\w+)/)
parts[2] + " " + parts[1]

我想這會幫助你

var demo = angular.module('demo', []);
demo.directive('displayTime', function($parse) {
    return {
        restrict: 'E',
        replace: true,
        transclude: false,
        template: '<ul><li ng-repeat="data in datas">{{data.first}}----- {{data.last}}</li></ul>',
        link: function (scope, element, attrs, controller) {
          scope.datas = [{first:"pavan",last:"techie"},{first:"sword",last:"fish"}]; 
        }
    }});

JS FIDDLE

嘗試使用AngularJs更改您的名字

 body{ font-family: 'arial'; } ul,li{ list-style: none; } ul{ padding: 0px; margin:0px; } .name-demo{ border: 1px solid #333; padding: 10px; } .name-demo li{ margin-bottom: 15px; margin-top: 15px; } .name-demo li input{ border:1px solid #e4e4e4; height: 35px; padding: 5px; width: 200px; margin-left: 10px; } 
 <!DOCTYPE html> <html> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script> <body> <p>Try to Change your name using AngularJs</p> <div ng-app="myApp" ng-controller="myCtrl"> <div class="name-demo"> <ul> <li> First Name: <input type="text" ng-model="firstName"> </li> <li> Last Name: <input type="text" ng-model="lastName"> </li> <li> Full name is: {{firstName + " " + lastName}} </li> </ul> </div> </div> <script> var app = angular.module('myApp',[]); app.controller('myCtrl', function($scope){ $scope.firstName = "Arvinda"; $scope.lastName = "Kumar"; }); </script> </body> </html> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM