簡體   English   中英

ng-model 中的傳遞函數

[英]Pass function in ng-model

例如,是否可以將函數傳遞給 ng-model

<input type="text" name="email" class="form-control" ng-model="createModel('email')" ng-change="addProperty(email,'email')" email required placeholder="Email">

ng-change 工作正常,但ng-model="createModel(email)"顯示此錯誤

> Expression 'createModel('email')' is non-assignable. Element: <input
> type="text" name="email"....

在控制器中我有://我現在只想傳遞值

  $scope.createModel = function(modelName){
     console.log("Model name"+modelName);
  }

我在互聯網上看到人們這樣做的例子

看起來 AngularJS 在 1.3 版中添加了“getter”“setter”支持

您可以滾動到其 ngModel 文檔頁面的底部:

https://docs.angularjs.org/api/ng/directive/ngModel

這允許您在 ngModel 屬性中指定方法而不是變量。 該方法應采用可選參數。 如果傳遞了一個參數,它應該存儲該值,如果沒有傳遞參數,它應該返回一個值。

您可以在另一個 Stack Overflow 答案中看到一個示例: https : //stackoverflow.com/a/28224980/984780

無法將函數傳遞給ng-model因為 Angular 必須能夠在用戶更改輸入值時設置該值。 你不能告訴 Angular 在值改變時調用一個函數。 您可以做的是使用 getter 和 setter 方法在范圍上定義一個屬性,例如:

var email = 'test@test.com';
Object.defineProperty($scope, 'email', {
  get: function() {
    return email;
  },
  set: function(value) {
    email = value;
  }
});

但我會說你最好為屬性創建一個 $watch ,因為其他 Angular 開發人員會更熟悉它。

編輯:要根據其他值綁定到不同的模型,您仍將綁定到ng-model的相同屬性,但您可以在手表中將其交換。 像這樣的東西:

var model1 = {
  value: 'hi'
};
var model2 = {
  value: 'hello'
};
$scope.model = model1;

$scope.checkboxValue = true;
$scope.$watch('checkboxValue', function(value) {
  if (value) {
    $scope.model = model1;
  } else {
    $scope.model = model2;
  }
});

和:

<input type="text" ng-model="model.value">
<input type="checkbox" ng-model="checkboxValue">

這將根據是否選中復選框來更改文本輸入的值。

暫無
暫無

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

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