Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-在指令中更改控制器模型_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS-在指令中更改控制器模型

Javascript AngularJS-在指令中更改控制器模型,javascript,angularjs,Javascript,Angularjs,有一个简单的角度示例,我想要的是在span单击时,控制器模型从指令更改,文本字段获取模型的值。这可能吗?我认为您使用了错误的语法来指代ngModel,再加上Angular可能已经以其他方式使用了ngModel;如果更改用于存储文本的属性的名称,即txtVal,并在模板中引用该属性而不包含范围。,则应能够在单击范围后更改输入值 大概是这样的: <div ng-controller="ctrl"> <input change-model txt-val="change_me"

有一个简单的角度示例,我想要的是在span单击时,控制器模型从指令更改,文本字段获取模型的值。这可能吗?

我认为您使用了错误的语法来指代ngModel,再加上Angular可能已经以其他方式使用了ngModel;如果更改用于存储文本的属性的名称,即
txtVal
,并在模板中引用该属性而不包含
范围。
,则应能够在单击范围后更改输入值

大概是这样的:

 <div ng-controller="ctrl">

<input change-model txt-val="change_me" />

<p>{{change_me}}</p>

{{改变我}

在js文件中:

app.directive "changeModel", ($compile) ->
  priotity: 0
  restrict: "A"
  scope:
     txtVal: '='
  link: (scope, element, attrs) -> 
     //Use txtVal instead of scope.txtVal here
     tpl = "<input ng-model='txtVal' /><span data-value='Write this to model' ng-click='clickHandle()'>Must paste text on click</span></span>"
    new_el = angular.element(tpl)
    scope.clickHandle = ->
       scope.txtVal = "some text" 
app.directive“changeModel”,($compile)->
优先权:0
限制:“A”
范围:
txtVal:“=”
链接:(范围、元素、属性)->
//在此处使用txtVal而不是scope.txtVal
tpl=“单击时必须粘贴文本”
新元素=角度元素(tpl)
scope.clickHandle=->
scope.txtVal=“一些文本”

通过这些更改,单击span更新输入值和

的内容。为什么不在模板中使用?我需要向输入中添加更多元素,使用模板时,我会看到“错误:模板必须有一个根元素”以克服该错误,将模板包装成一个。但是,输入中的属性会移动到此div,而不是新的inputInteresting,该模型实际上会接受新值,但输入对此一无所知。也许有方法强制视图刷新绑定?谢谢!看起来值的名称并不重要,但使用“无作用域”解决了问题。很酷,我不确定Angular是否会出于自己的目的保留ngModel,无论如何,为了清晰起见,我仍然认为最好更改它。