我剛剛開始使用ngJS。AngularJS:將服務屬性綁定到控制器
我已經找到了將服務objects
綁定到控制器的方法。
我想知道,這是一個很好的做法,以實現這一點或有一個建議的方式來做到這一點?
我也想知道爲什麼只有objects
而不是properties
?
這是我的fiddle。 深入解釋是值得歡迎的。
謝謝。
我剛剛開始使用ngJS。AngularJS:將服務屬性綁定到控制器
我已經找到了將服務objects
綁定到控制器的方法。
我想知道,這是一個很好的做法,以實現這一點或有一個建議的方式來做到這一點?
我也想知道爲什麼只有objects
而不是properties
?
這是我的fiddle。 深入解釋是值得歡迎的。
謝謝。
閱讀本文SO thread。
A
variable
可以保存兩種類型的值之一:primitive values and reference values
。
Primitive values
是存儲在堆棧上的數據。Primitive value
直接存儲在變量訪問的位置。Reference values
是對象存儲在堆。存儲在變量位置中的Reference value
是指向存儲對象的存儲器中的位置的指針。- 原始類型inlcude
Undefined
,Null
,Boolean
,Number
或String
。基礎知識
對象是屬性的聚合。酒店可以參考
object
或primitive
。Primitives are values
,它們沒有 屬性。JavaScript有5種基本數據類型:串,數, 布爾,空,未定義。除了空值和未定義之外,所有基元值都具有圍繞原始值包圍 的對象等價物,例如, a 字符串對象環繞 字符串原語。所有基元都是不可變的。
其實,你只綁定作用域屬性的視圖,然後這些特性已與服務屬性值進行初始化。 你的代碼進行一些編輯:
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/