是否可以将ng_model引用传递给angularjs中的函数?

时间:2013-08-27 15:38:06

标签: javascript angularjs

我有一个选择框和一个依赖于所述选择框的输入,而不是写入该函数6次(因为这种关系发生了6次)我想将输入ng_model引用传递给ng-Change函数选择框,以便在更改选择框时,该功能可以更新引用的模型

更新

这就是我现在所拥有的:

<select id="name_select" ng-model="name_model" ng-change="getAU_name(type_model,name_model)" ng-selected="name_model" ng-options="user.name as user.name for user in AU_model[type_model]"  required></select>
<input id="description_input" ng-model="description_model" disabled></input>


$scope.getAU_name = function (type, name) {
    $.each($scope.AU_model[type], function (index, value) {

        if (value.name == name || value.description === name) {
            console.log("name= " + value.name + " description= " + value.description);
            $scope.description_model= value.name;
        }

    });

但是我有6个单独的关系做同样的事情所以我试图避免使用6个版本的getAU_name来设置$scope.description_model

基本上我有6个模型description_modeldescription_model_2 ...等我想用相同的函数设置。

2 个答案:

答案 0 :(得分:2)

我看到逻辑,你绝对可以简化很多这样的事情。您只需要在函数中传递user而不是type_model,而您根本不需要控制器中的循环。

您最好创建一个description对象来容纳所有6个模型。

<select id="name_select" ng-model="name_model" ng-change="getAU_name(user, name_model, 'model1')" ng-selected="name_model" ng-options="user.name as user.name for user in AU_model[type_model]"  required></select>
<input id="description_input" ng-model="description.model1" disabled></input>

$scope.getAU_name = function (user, name, model_name) {
    if (user.name == name || user.description === name) {
        description[model_name] = user.name;
    }
};

答案 1 :(得分:0)

为什么要传递模式;如果该模型已经在您的$ scope中?

你可以这样做:

视图:

<input ng-model="stuff" ... >
<a ng-click="mychange();">click</a>

控制器:

$scope.mychange = function(){
  $scope.stuff = "newValue";
}

更新:

对不起现在我知道你需要什么,我认为你应该为这个问题编写一个指令,这是我做过的一个例子:

视图:

<div ng-repeat="event in events" data-testd> 
    <span>{{event.title}}</span>  
    <a ng-click="clicky(event)">click</a>      
</div>

JS:

app.directive("testd", function() { 
    return function (scope, element, attrs) {
        scope.clicky = function(event){
            event.title="yolo";             
        }
    }
});