2015-11-05 111 views
0

我剛剛開始使用ngJS。AngularJS:將服務屬性綁定到控制器

我已經找到了將服務objects綁定到控制器的方法。

我想知道,這是一個很好的做法,以實現這一點或有一個建議的方式來做到這一點?

我也想知道爲什麼只有objects而不是properties

這是我的fiddle。 深入解釋是值得歡迎的。

謝謝。

回答

1

閱讀本文SO thread

A variable可以保存兩種類型的值之一:primitive values and reference values

  • Primitive values是存儲在堆棧上的數據。
  • Primitive value直接存儲在變量訪問的位置。
  • Reference values對象存儲在。存儲在變量位置中的
  • Reference value是指向存儲對象的存儲器中的位置的指針。
  • 原始類型inlcude Undefined,Null,Boolean,NumberString

基礎知識

對象是屬性的聚合。酒店可以參考 objectprimitivePrimitives are values,它們沒有 屬性。

JavaScript有5種基本數據類型:串,布爾未定義。除了空值和未定義之外,所有基元值都具有圍繞原始值包圍 的對象等價物,例如, a 字符串對象環繞 字符串原語。所有基元都是不可變的。

0

其實,你只綁定作用域屬性的視圖,然後這些特性已與服務屬性值進行初始化。 你的代碼進行一些編輯:

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

myApp.service('s1', function() { 
    this.Input = { 
     name: 'John' 
    }; 

    this.name = 'Doe'; 
}); 

myApp.controller('c1', function($scope, s1) { 
    $scope.Input = s1.Input; 
    $scope.name = s1.name; 
}); 

myApp.controller('c2', function($scope, s1) { 
    $scope.Input = s1.Input; 
    $scope.name = s1.name; 

    $scope.change = function() { 
     console.log("s1.name = "+s1.name); 
     s1.name = "ciao"; 
     console.log("s1.name = "+s1.name); 
    }; 
}); 

所以,如果你改變$範圍的值。c2控制器的名稱(例如,編輯視圖中的輸入框)不傳播到s1.name。 多,如果你改變了s1.name財產(詳見C2控制器$ scope.change方法)這個修改不會傳播到$ scope.name。

傳播服務特性的變化的一種方法是使用事件,即上升從服務事件和收聽在控制器相同的事件(見How do I create a custom event in an AngularJs service)。

這裏是jsfiddle更新:http://jsfiddle.net/0j0mdjco/2/

相關問題