Nel codice seguente.
<!DOCTYPE html>
<html ng-app="app10" ng-cloak>
<head>
<title>Custom directives</title>
<style>
[ng\:cloak], [ng-cloak], .ng-cloak{
display: none;
}
</style>
</head>
<body>
<div ng-controller="mainCtrl as o">
<div bb-player-list="bbPlayers" array-item="name | uppercase" ng-model="o">
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script><scripttype="text/javascript" src="js/exam10.js"></script>
</body>
</html>
var app10 = angular.module("app10", []);
app10.directive("bbPlayerList", DirectiveFunction);
function DirectiveFunction(){
return function(scope, element, attrs){
var data = "";
if(attrs["ngModel"] === "")
data = scope[attrs["bbPlayerList"]];
else
data = scope[attrs["ngModel"]][attrs["bbPlayerList"]];
}
}
app10.controller("mainCtrl", MainController);
function MainController(){
this.bbPlayers = [
{name: "Barry Bonds", avg: 0.298, hr: 762, obp: 0.444},
{name: "Hank Aaron", avg: 0.305, hr: 755, obp: 0.374},
{name: "Babe Ruth", avg: 0.342, hr: 714, obp: 0.474},
{name: "Ted Williams", avg: 0.344, hr: 521, obp: 0.482}
];
}
In DirectiveFunction
, c'è un odore di codice nel recuperare i dati usando ngModel
,
var data = "";
if(attrs["ngModel"] === "")
data = scope[attrs["bbPlayerList"]];
else
data = scope[attrs["ngModel"]][attrs["bbPlayerList"]];
Il motivo per aggiungere questo codice è l'odore,
se il controller è istanziato come mainCtrl as o
allora ngModel
sarebbe "o"
altrimenti ngModel
sarà ""
. Questo attributo ngModel
deciderà come accedere a bbPlayers
in DirectiveFunction
?
Posso evitare questo odore di codice in DirectiveFunction
?
In che modo DirectiveFunction
viene immune, il modo in cui mainCtrl
viene istanziato?