簡體   English   中英

AngularJS中的通用getterSetter

[英]General-purpose getterSetter in AngularJS

ngModel的文檔有一個getterSetter的例子:

angular.module('getterSetterExample', [])
.controller('ExampleController', ['$scope', function($scope) {
  var _name = 'Brian';
  $scope.user = {
    name: function(newName) {
     // Note that newName can be undefined for two reasons:
     // 1. Because it is called as a getter and thus called with no arguments
     // 2. Because the property should actually be set to undefined. This happens e.g. if the
     //    input is invalid
     return arguments.length ? (_name = newName) : _name;
    }
  };
}]);

這正是我所需要的,但我不想在不同的環境中一遍又一遍地寫這部分。 是否可以創建一個通用的getterSetter? 喜歡

$scope.user.name = nameGetterSetter;

我只是看不出該全局函數如何在不通過范圍的情況下獲取或設置任何特定實例。

在我看來,你實際上並不需要使用getterSetter。 為處理用戶創建單獨的模型會更有用。 一種方法是創建一個Angular服務。 這是一個人為的例子:

// I'm using a separate module, but you don't have to
angular.module('user').factory('User', function() {

    function User(name) {
        this.name = name;
    }

    return User;

});

現在,如果我們回到你的代碼:

angular.module('getterSetterExample', ['user'])
  .controller('ExampleController', ['$scope', 'User', function($scope, User) {
      $scope.user = new User('Brian');
  }]);

我已將“用戶工廠”注入控制器,然后使用它來創建用戶模型。 如果需要,您可以將服務注入多個控制器。 我建議你閱讀有關服務的內容

如果您使用的是REST API,請查看ngResource 它提供了一些檢索和存儲數據的通用功能。

嘗試類似的東西:

Sharer.js:

  myApp.factory('mySharer', [function () {
    var myField = 'Initialized';

    return {
        getProperty: function() {
            return myField;
        },
        setProperty: function(value) {
            myField = value;
            return myField;
        }
    };
  }]);

Controller.js:

myApp.controller("myController", ["$scope","mySharer",        
                                      function($scope, mySharer){

        $scope.myField='HellYeah!';
        mySharer.setProperty($scope.myField);

}]);

希望我一直很有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM