2015-06-21 42 views
1

我想從angular.js主頁採取第一個例子並添加cookie支持。Ng模型與Cookie

這是我到目前爲止有:https://jsfiddle.net/y7dxa6n8/8/

是:

<div ng-app="myApp"> 
    <div ng-controller="MyController as mc"> 
    <label>Name:</label> 
    <input type="text" ng-model="mc.user" placeholder="Enter a name here"> 
    <hr> 
    <h1>Hello {{mc.user}}!</h1> 
    </div> 
</div> 

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

myApp.controller('MyController', [function($cookies) { 

      this.getCookieValue = function() { 
        $cookies.put('user', this.user); 
        return $cookies.get('user'); 
      } 

      this.user = this.getCookieValue(); 
}]); 

但它不工作,我一直在努力學習的角度。 感謝

+1

只是在你的代碼中輸入錯誤? myApp.controller('MyController',[函數('$ cookie'){應該是'$ cookies'?) –

+0

我試過@TamaroTamaroidny它沒有工作:(https:// jsfiddle。net/y7dxa6n8/8/i更新了以上鍊接及其內容代碼 – Noitidart

回答

1

我建議你創建的應用程序模塊中的服務爲這樣的:

app.service('shareDataService', ['$cookieStore', function ($cookieStore) { 

var _setAppData = function (key, data) { //userId, userName) { 
    $cookieStore.put(key, data); 
}; 

var _getAppData = function (key) { 
    var appData = $cookieStore.get(key); 
    return appData; 
}; 
return { 
    setAppData: _setAppData, 
    getAppData: _getAppData 
}; 
}]); 

注入shareDataService控制器來設置和獲取cookie值 爲:

//set 
var userData = { 'userId': $scope.userId, 'userName': $scope.userName }; 
shareDataService.setAppData('userData', userData); 

//get 
var sharedUserData = shareDataService.getAppData('userData'); 
$scope.userId = sharedUserData.userId; 
$scope.userName = sharedUserData.userName; 

工作小提琴:https://jsfiddle.net/y7dxa6n8/10/

我在兩個控制器之間使用了cookie服務。填寫文本框,看看它如何被利用。

+0

Thanks @ Dev1爲什麼你會推薦這種方式?我試了一下,它沒有工作:https://jsfiddle.net/y7dxa6n8/6/你能告訴我如何做到這一點,也沒有這種服務方式,這將有助於我的學習很多。 – Noitidart

+0

以前的評論鏈接到我嘗試你的方法,這是我簡單的方法:https://jsfiddle.net/y7dxa6n8/8/你可以請幫助m兩個工作,它會教我很多。 – Noitidart

1

OK,再次檢查你的代碼,這裏是你的答案 https://jsfiddle.net/wz3kgak3/

  1. 問題 - 錯誤的語法:控制器的通知定義,而不是使用[]作爲第二個參數 如果您正在使用[]在控制器中,你必須這樣使用它:

    myApp.controller('MyController',['$ cookies',function($ cookies){ .... }]);

這個「長」格式爲JavaScript uglyfier安全,當PARAM $cookies將成爲ab左右,並且將無法訪問的$cookies,所以你是在告訴控制器:「第一個參數在我的功能是cookies

  • 問題:您使用的角度1.3.x中,沒有方法PUT或GET在$餅乾,該方法僅在角1.4+ avalaible,所以就需要使用它老方法:$cookies.user = 'something';和吸氣劑:var something = $cookies.user;

  • 問題 - 你是不是存儲該cookie值,模型被更新,但cookie不會自動綁定,所以使用$留意看着user變化,並將其存儲:

    $watch('user', function(newValue) { $cookies.user = newValues; });

  • 或者通過一些事件做(點擊,提交或我不知道在哪裏)

    編輯:全面工作示例與$範圍 https://jsfiddle.net/mwcxv820/

    +0

    Thaknks非常@Tamaro是否可以使用getter/setter來使它工作?我在這裏試試:https://jsfiddle.net/wz3kgak3/1/感謝這個幫助我學了很多 – Noitidart

    +0

    我試過你的手錶方法,但它沒有工作:(https://jsfiddle.net/wz3kgak3/2/ – Noitidart

    +1

    $ watch是$ scope的方法,所以你必須使用'$ scope'而不是'this',同時刪除'ng-model =「mc.user」',只需要使用'ng-model =「user」',這是在javascript中綁定這個值爲'this.mc.user'(角度上,你可以綁定到非現有的值/對象,它會爲你創建',工作示例https://jsfiddle.net/mwcxv820/ –