我有一个表单,如果复选框为false,则使用ng-required指令对文本输入强制执行验证.如果复选框为true,则隐藏该字段,并将ng-required设置为false.
问题是我还在输入上指定了验证的正则表达式,并使用了ng-pattern angular指令.我遇到的问题是,如果用户填写了无效的电话号码,请选中该框以停用该输入(因此无需进一步验证),表单将不允许提交,因为它基于ng-pattern无效.
我尝试通过添加ng-change函数来将输入模型设置为null来解决此问题,但是ng-pattern和字段仍然在复选框的初始设置为false时设置为无效.但是,如果我取消选中该框,将所有内容设置回初始表单加载,然后再次选中该框,表单有效并且能够提交.我不确定我错过了什么.这是我到目前为止的ng-change代码:
var phoneNumberRegex = /^\(?(\d{3})\)?[ .-]?(\d{3})[ .-]?(\d{4})$/;
$scope.phoneNumberPattern = phoneNumberRegex;
$scope.removeValidation = function() {
if ($scope.cell._newUser === false) {
$scope.request._number = '';
$scope.phoneNumberPattern = /[0-9a-zA-Z]?/;
} else {
$scope.phoneNumberPattern = phoneNumberRegex;
}
};
Run Code Online (Sandbox Code Playgroud) 我有一个模板的指令
<div>
<div ng-repeat="item in items" ng-click="updateModel(item)">
<div>
Run Code Online (Sandbox Code Playgroud)
我的指令被声明为:
return {
templateUrl: '...',
restrict: 'E',
require: '^ngModel',
scope: {
items: '=',
ngModel: '=',
ngChange: '&'
},
link: function postLink(scope, element, attrs)
{
scope.updateModel = function(item)
{
scope.ngModel = item;
scope.ngChange();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望ng-change在单击某个项目时调用,foo并且已经更改了值.
也就是说,如果我的指令实现为:
<my-directive items=items ng-model="foo" ng-change="bar(foo)"></my-directive>
Run Code Online (Sandbox Code Playgroud)
我希望在更新bar值时调用foo.
使用上面给出的代码,ngChange成功调用,但使用旧值foo而不是新更新值调用它.
解决该问题的一种方法是调用ngChange内部超时以在将来的某个时刻执行它,此时值foo已经更改.但是这个解决方案让我可以放松地控制事情的执行顺序,我认为应该有一个更优雅的解决方案.
我也可以foo在父作用域中使用一个观察者,但是这个解决方案并没有真正给出一个ngChange方法,我被告知观察者是伟大的记忆消费者.
有没有办法在ngChange没有超时或观察者的情况下同步执行?
我有一个input字段,我想在其中应用变体ngChange.
该input字段与ajax调用绑定,当用户更改输入时,服务器端将处理数据,但是,我不想经常拨打电话.
假设用户想输入一个真正的字符串,我希望只有在用户完成他要输入的单词后才能进行调用.不过,我不想使用模糊等事件.什么是更好的方法来实现这一点,而不是setTimeout?
什么时候应该使用角度$watch函数和何时使用ng-changeangularjs指令?对我来说,他们都可以这样做.
它们之间是否存在差异或使用模式?
我正在编写一个将数据PUT到API的编辑表单(user.html),但我想避免PUTting表单中的所有数据.我想把改变的项目PUT.
在使用表单时,我已经看到使用脏和原始,但这适用于表单中的任何更改.我也看过使用ng-change,但是我不想触发对一个元素的更改操作,只是表示更改的元素应该包含在PUT中.
有人找到了一种方法来表示只有已更改的输入字段吗?
我是棱角分明的新手.在我的代码中,有一个从文本字段初始化的颜色选择器.用户更改颜色的值,我希望该颜色反映为跨度中文本的背景.它不起作用.缺什么?
HTML:
<body ng-app="">
<input type="button" value="set color" ng-click="myStyle={color:'red'}">
<input type="button" value="clear" ng-click="myStyle={}">
<input type="text" name="abc" class="color" ng-change="myStyle={color:'green'}">
<br/>
<span ng-style="myStyle">Sample Text</span>
<pre>myStyle={{myStyle}}</pre>
</body>
Run Code Online (Sandbox Code Playgroud)
Plunker - http://plnkr.co/edit/APrl9Y98Em0d6rxuzRDE?p=preview
但是,当我改变ng-click它的工作.
我是棱角分明的新手.我试图从ng-change of select中调用工厂服务方法'getScoreData',但是无法完成它.请帮忙.
Html代码:
<select ng-model="Score" ng-change="getScoreData(Score)" ng-options="c.name for c in Scores"></select>
Run Code Online (Sandbox Code Playgroud)
Angularjs代码:
var app = angular.module('audiapp', []);
app.controller('audiLayoutCtrl', function ($scope, ScoreDataService) {
ScoreDataService.getScoreData($scope.Score, function (data) {
$scope.ScoreData = data;
});
});
app.factory('ScoreDataService', function ($http) {
return {
getScoreData: function (Score, callback) {
var params = {
questionCode: Score.code
}
return $http({
url: 'Home/GetAvgData',
method: 'GET',
params: params
}).success(callback);
}
};
});
Run Code Online (Sandbox Code Playgroud)
上面是服务工厂方法,它从控制器实例化.我尝试从ng-change of select实例化,但它既没有给出错误也没有被调用.
angularjs angularjs-directive angularjs-service angularjs-factory angularjs-ng-change
输入如下:
<input type="text" ng-model="repair.test" ng-change="action()" />
Run Code Online (Sandbox Code Playgroud)
在action()当我手动键入和改变输入被执行.但是,如果我通过编程方式通过其他函数更改repair.test值,则不会触发ng-change的操作.我已阅读角度教程,这可能是预期的行为.
https://docs.angularjs.org/api/ng/directive/ngChange
"当值变化来自模型时,不会评估表达式." < - 我也需要这个.当模型以任何方式改变时,如何在控制器中触发动作?(输入输入或任何其他功能)
谢谢您的帮助.
编辑:
模型值实际上是form.$valid,它有自己的Form控制器(我认为),这就是我使用action函数尝试将值传递给父控制器的原因.所以$scope.$watch此刻不起作用,只有在它被初始化时.
javascript data-binding angularjs angularjs-ng-change angular-ngmodel
请参阅以下plnkr:http://plnkr.co/edit/KZwIBX?p = preview
第一个标准选择按预期工作(至少就我预期/预期的那样),这意味着在更新模型后调用ng-change.但是当我创建一个具有隔离范围的指令时,似乎在我的模型更新之前调用了ng-change.显然我有一些误解.
与ng-change之后更新的AngularJS范围非常相似的情况
<input type="text" id="exampleab"
ng-model="a.b"
ui-event="{ blur : 'callScriptThenServer()' }" >
Run Code Online (Sandbox Code Playgroud)
由于某些原因,ng-changeon文本框不起作用,所以我正在使用它; 使用Angular-ui ui-events.
我想只在值改变时调用该函数,并且还希望在回调中使用旧值.(因为我想将oldValue发送到服务器).
我不想通过纯指令路由,因为有这么多的出现
NG-CHANGE:每个角色都改变了,我得到一个回调.我不希望这样.我需要调用服务器脚本..使用文本框中的旧值和模糊后的新值