Wie entferne ich die anfängliche leere Option und wähle den Wert <Option>, wenn ich ng-repeat oder ng-options verwende?

Angular Neuling. Das Filtern der über den Datenservice zurückgegebenen JSON-Daten und das Filtern erfolgt über die Dropdown-Liste. Was ich tun möchte, ist eine Kombination von Dingen:

Ich möchte den über Angular zurückgegebenen anfänglichen Leerwert entfernen.Ich möchte auch, dass es standardmäßig einen Wert vorwählt, der nicht in meinem Datenobjekt enthalten ist (in meinem Fall, alle Objekte zurückgeben, als @ hinzugefügtselect option über mein HTML); unIch möchte, dass dieser anfängliche Standardwert angezeigt wird, wenn die Seite gerendert wird.

Ich kann das anfängliche Leerzeichen entfernen, aber nicht die Option, die ich einbeziehe, integrieren.

Ich habe mir das angeschaut mitng-repeat undng-options, und kann den Standardwert auf eines der Objekte in meinem json über @ setzng-options, aber das scheint es mir nicht zu ermöglichen, eine Option hinzuzufügen, die in den Daten nicht vorhanden ist. Da ich keine Gruppe habe, die alle Werte zurückgibt (und dies am besten nicht tun würde, da dadurch meine Datendatei viel größer wird), schien es der beste Weg, dies als Option hinzuzufügen.

Es gibt viele Themen, wie der für Angular zurückgegebene leere Wert entfernt werden kann (z. B.Leeres erstes Element in der Dropdown-Liste undAngular JS Option "Leerzeichen entfernen" unter Option auswählen, etc.). Ich sehe auch, wie man einen Wert über @ vorwähng-init, aber dies scheint zu erfordern, dass der Wert Teil meines Datenobjekts ist und nicht eine Option, die post-hoc über select @ hinzugefügt wurdoption wie ich getan habe. Außerdem sehe ich, wie man einen leeren Datenwert über @ vorwählng-options (z.B.http: //ng-learn.org/2013/11/Draw_a_select_with_default_option), aber das scheint mir nicht zu erlauben, einen Datenwert hinzuzufügen, der alle Datenobjekte zurückgeben würde. Wenn ich @ hinzufüng-selected='true' für meinen Optionsdatenwert scheint ausgewählt zu sein, wenn die Seite geladen wird, dieser Wert verschwindet jedoch und das Auswahl-Dropdown-Menü wird als @ gerenderng-pristine pro Entwicklertools. Nicht sicher, was ich vermisse.

Working plunk hier. Wie es ist, hat es das anfängliche Leerzeichen, obwohl Sie wieder sehen können, dass "Show All" in der Dropdown-Liste angezeigt wird, wenn die Seite zum ersten Mal geladen wird, aber dass sie verschwindet. Auch hier möchte ich das Leerzeichen entfernen und die Option als Standardwert auswählen und diese in der Dropdown-Liste anzeigen lassen, damit die Benutzer wissen, dass sie gerendert werden.

Vielen Dank für jede Hilfe!

html:

<div>
    <div>    
        <form action="">
            Group:  
            <select name="groups" id="grp" ng-model="groupid" ng-change="selectGroup()">
                <option value="0" ng-selected="true">Show All</option>
                <option ng-repeat="option in groups" value="{{option.ID}}" ng-selected="$first">{{option.name}}
                </option>
            </select>
        </form>
    </div>
    <div>
        <form action="">
            Asset:
            <select name="assets" id="assets" ng-model="selectedAsset">
                <option ng-repeat="option in assets | filter: myFilter" value="{{option.ID}}">{{option.driverName}}</option>
            </select>
        </form>
    </div>
</div>

Filter

$scope.myFilter = function(val, i, a) {
        if($scope.groupid==0){
            return true;
        };
        var m = false;
        var grp = angular.fromJson($scope.selectedGroup);
        angular.forEach(grp.members, function(v, k){
            if(val.vpkDeviceID == v.vpkDeviceID){
                m = true;
            }
        }, m);
        return m;
    };

$scope.selectedAsset = {};
$scope.groupid = 0;
$scope.selectedGroup = {};
$scope.selectGroup = function(){
    var grp = [];
    angular.forEach($scope.groups, function(v,i){
        if($scope.groupid == v.ID){
            $scope.selectedGroup = v;
        }
    })
}

json:

{
   "assets": [
        {
            "deviceName": "vehicle 25",
            "vpkDeviceID": 352964050744425,
            "driverName": "Mike Smith"
        },
        {
            "deviceName": "vehicle 52",
            "vpkDeviceID": 352599041910352,
            "driverName": "John Doe"
        },
        {
            "deviceName": "vehicle 11",
            "vpkDeviceID": 862170016156711,
            "driverName": "Sarah Johnson"
        },
        {
            "deviceName": "vehicle 28",
            "vpkDeviceID": 862193020453528,
            "driverName": "Eleanor Petit"
        }
    ],
    "groups":
        [
            {"ID": 1, "name": "nairobi", "members": [{"vpkDeviceID": 352964050744425}, {"vpkDeviceID": 352599041910352}, {"vpkDeviceID": 862170016156711}]}, 
            {"ID": 2, "name": "karen", "members": [{"vpkDeviceID": 352964050744425}, {"vpkDeviceID": 352599041910352}]}, 
            {"ID": 3, "name": "langata", "members": [{"vpkDeviceID": 352599041910352}, {"vpkDeviceID": 862170016156711}, {"vpkDeviceID": 862193020453528}]},
            {"ID": 4, "name": "downtown", "members": [{"vpkDeviceID": 352964050744425}, {"vpkDeviceID": 862170016156711}]}, 
            {"ID": 5, "name": "westlands", "members": [{"vpkDeviceID": 862193020453528}]}
        ]
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage