2015-04-16 40 views
2

我有一個表單,它具有綁定到LoginController.session屬性的兩個輸入字段(session.emailsession.psw)。當我點擊重置按鈕時,我打電話給LoginController.reset()功能。角度控制器的屬性無法在其功能之外訪問

我想使用變量sessionDefault (empty)來清除會話屬性。但是它只能工作一次,如果我重置兩次表單,sessionDefaultundefined

我怎樣才能使它作爲控制器的常量屬性?

app.controller('LoginController', function ($scope) 
     { 
     this.session={}; 
     var sessionDefault= 
       { 
        email : "", 
        psw: "" 
       };  

     this.reset = function() 
       { this.session = sessionDefault; };      
     }); 
+0

這不是一個答案,它不起作用。這只是我的不工作代碼 – DeLac

+0

我評論的評論被刪除,對不起 – Rouby

+0

哦..好的,沒關係:) – DeLac

回答

2

試用了這一點

復位功能只是sessionDefault重新複製類似如下所示

vm.reset = function() { 
    vm.session = angular.copy(sessionDefault); 
}; 

這裏this指的是控制器實例

請注意,我用var vm = this;,然後我裝飾vm與應該暴露和數據綁定到視圖的成員。 vm只是表示view modal

這對我有3件事。

  • 提供在我的控制器創建綁定的一致和可讀方法

  • 移除與該作用域處理或結合(即,在嵌套函數閉包)

  • 移除$scope從任何問題除非我明確需要它作爲別的東西

Working Demo

腳本

var app = angular.module('myApp', []); 
    app.controller('LoginController', function ($scope) { 
    var vm = this; 
    vm.session = {}; 
    var sessionDefault = { 
     email: "", 
     psw: "" 
    }; 
    vm.reset = function() { 
     vm.session = angular.copy(sessionDefault); 
    }; 
}); 

HTML

<div ng-app='myApp' ng-controller="LoginController as login"> 
    Email:<input type="text" ng-model="login.session.email"/>{{login.session.email}} 
    <br> 
    Psw:<input type="text" ng-model="login.session.psw"/>{{login.session.psw}} 
    <br> 
    <button ng-click="login.reset()">Reset</button> 
</div> 

看看這個美麗的東西。

AngularJS’s Controller As and the vm Variable

+0

這段代碼和我的一樣,它只重置一次。在第二怨恨,它不再工作 – DeLac

+0

@DeLac我已更新我的答案,檢查工作演示 –

+0

現在它的工作!太好了謝謝。所以我需要'vm.session = angular.copy(sessionDefault)'而不是'vm.session = sessionDefault'我想知道爲什麼..我不知道這個函數。 – DeLac

0
this.reset = function() 
       { this.session = sessionDefault; }; 

在該上下文中的this指功能(reset)。如果你想訪問'原始'this你需要將它存儲在一個變量。

app.controller('LoginController', function ($scope) 
     { 
     this.session={}; 
     var sessionDefault= 
       { 
        email : "", 
        psw: "" 
       };  

     var self = this; 
     this.reset = function() 
       { self.session = angular.clone(sessionDefault); };      
     }); 
+0

提供的一種深層複製功能,它很有意義。然而,作爲其他解決方案,它只能使用一次。我想不出爲什麼.. – DeLac

+0

根據@Nidhish,似乎需要_angular.copy(sessionDefault)_ – DeLac

+0

這是正確的 – Rouby