2016-09-08 4 views
1

Ich habe versucht, den Controller als Syntax zum ersten Mal zu implementieren, und ich habe ein Problem, wo meine Funktion nicht ändert die Controller-Variable, die ich aus der Vorlage übergeben. Stattdessen versteht es den Parameter als eine lokale Variable. Dies würde nicht passieren, wenn ich $ scope verwende.Controller als Syntax ändert nicht Controller-Variablenwert

Hier ist mein Controller.

angular 
    .module('app') 
    .controller('baseCtrl', baseCtrl); 

    function baseCtrl() { 

    base = this; 
    base.myVar = 'string_1'; 
    base.myFunction = myFunction; 

    function myFunction(value) { 
    value = 'string_2"'; 
    } 
} 

Hier ist meine Vorlage.

<div ng-controller="baseCtrl as base"> 
    <button ng-click="base.myFunction(base.myVar)">Button</button> 
</div> 

Nach Klick base.myVar sollte von „string_1“ auf „string_2“ ändern, aber dies nicht geschieht.

Weiß jemand, wie ich es herausfinden könnte?

+0

* „Das wäre nicht passiert, wenn ich $ Bereich zu verwenden“ * .. warum nicht, was würde Unterschied sein? Ihre Funktion ändert immer noch nur eine lokale Variable – charlietfl

+0

Ich denke, Basis könnte ein Schlüsselwort oder etwas in JavaScript sein; hat das vielleicht damit zu tun? –

Antwort

0
base.myVar = "string2" 

Das wird fix it

+0

Ich muss diese Funktion global verwenden ... also jedes Mal, wenn ich einen Parameter übergebe, muss ich die relative Controller-Variable ändern. – Korte

+0

Ich sehe jetzt wot ur binden zu tun ... Vielleicht funktioniert es, aber eckig ist nicht die Ansicht aktualisieren ... Erwägen Sie mit scope.apply – danday74

+0

Leider ist es nicht – Korte

1

es wie dies getan werden kann, tun einige Änderungen im Code

angular 
 
    .module('app',[]) 
 
    .controller('baseCtrl',function(){ 
 

 
    var base = this; 
 
    base.myVar = 'string_1'; 
 
    base.myFunction = myFunction; 
 
    
 
    
 
    function myFunction(value) { 
 
    value = 'string_2"'; 
 
    base.myVar = value 
 
    alert(value); 
 
    } 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="baseCtrl as base"> 
 
    <input type="text" ng-model="base.myVar"/> 
 
    <button ng-click="base.myFunction(base.myVar)">Button</button> 
 
</div>

+0

Was ich brauche, ist nicht base.myVar in der Funktion zu deklarieren, aber der Wert, um bei base.myVar oder einer anderen Variablen, die ich übergeben, zu indizieren. – Korte

1

Sie haben zuweisen

base.myVar = 'string"'; 

in myFunction und definieren Modul App wie folgt aus: -

angular.module('app',[]); 

Dies ist der modifizierte Code, der funktioniert.

angular 
.module('app', []) 
.controller('baseCtrl', baseCtrl); 

function baseCtrl() { 
    var base = this; 
    base.myVar = 'string_1'; 
    base.myFunction = myFunction; 
    function myFunction(value) { 
     base.myVar = 'string_2"'; 
    } 
} 
0

Ich endlich herausgefunden, was los war. Das Problem ist, dass die übergebene Variable primitiv ist. Die Lösung besteht darin, meine Variablen von primitiv zu Objekten zu ändern.

Also in meinem Fall ist die Lösung:

base.myVar = { 
    val: "string_1" 
}; 

function myFunction(value) { 
    value.val = "string_2"; 
}; 
Verwandte Themen