Javascript ng模型中的传递函数

Javascript ng模型中的传递函数,javascript,angularjs,Javascript,Angularjs,例如,是否可以将函数传递到ng模型中 <input type="text" name="email" class="form-control" ng-model="createModel('email')" ng-change="addProperty(email,'email')" email required placeholder="Email"> 在Controller中,我有: //我现在只想传递值 $scope.createModel = function(mode

例如,是否可以将函数传递到ng模型中

<input type="text" name="email" class="form-control" ng-model="createModel('email')" ng-change="addProperty(email,'email')" email required placeholder="Email">
在Controller中,我有: //我现在只想传递值

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

我在互联网上看到过这样的例子,人们这样做是不可能将函数传递给
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,因为其他角度开发人员会更熟悉它

编辑: 要根据其他值绑定到不同的模型,您仍然需要绑定到
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;
  }
});
以及:



这将根据是否选中复选框来更改文本输入的值。

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

您可以滚动到ngModel文档页面的底部,网址为:

这允许您在ngModel属性中指定方法而不是变量。该方法应采用可选参数。如果传递了参数,它应该存储该值,如果没有传递参数,它应该返回一个值


您可以在另一个堆栈溢出回答中看到一个示例:

您的createModel函数不返回任何东西,我看不出它的用途。您可以在控制器中的模型上安装一块手表。谷歌为angularJS$watch搜索更多@MichałDudak,我把return放在“something”上,但我得到了相同的结果error@AndreschSerj我不想$watch查看模型更改,我希望我的函数类似于$scope.createModel=function(modelName){return modelName+currentDashboard}currentDashboard在作用域中是变量,我想创建dinamic模型为什么没有$watch?有什么好的理由吗?谢谢你的回答,问题是我想根据下拉列表的选择动态创建模型,例如,如果下拉列表的值为1,模型将为“model1”,或者如果下拉列表的值为2,模型将为“model2”。我将此编号存储在currentDashboard变量中。我试图在HTMLNG model=“email{{{currentDashboard}}}”中添加类似的内容,但我在这里遇到了语法错误,并添加了一个示例进行编辑,该示例将引导您正确的方向。
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">