Lea*_*sed 7 javascript angularjs angularjs-scope angularjs-bindings
我有以下字符串:
"/root/get";
Run Code Online (Sandbox Code Playgroud)
现在我在上面的字符串中生成一个带有1个范围变量的查询字符串,但问题是当该变量的值发生变化时,新值不会自动更新到我的URL中.
您可以在下面的演示中看到我有2个按钮更新和检查.在更新中我生成查询字符串,并在检查按钮上我更新范围变量的值,但这没有反映在我的URL中.
我不明白为什么会这样.
单击检查按钮而不调用generateQueryParameters方法时的预期输出:
/root/get?no=2
Run Code Online (Sandbox Code Playgroud)
var app = angular.module("myApp", []);
app.controller("myController", function ($scope) {
$scope.no = 1;
$scope.str = "/root/get";
$scope.update = function (data) {
$scope.str=generateQueryParameters($scope.str,
"no",$scope.no);
console.log($scope.str);
};
$scope.check = function () {
$scope.no=2;
console.log($scope.str);
};
function generateQueryParameters(url,name,value)
{
var re = new RegExp("([?&]" + name + "=)[^&]+", "");
function add(sep) {
url += sep + name + "=" + encodeURIComponent(value);
}
function change() {
url = url.replace(re, "$1" + encodeURIComponent(value));
}
if (url.indexOf("?") === -1) {
add("?");
} else {
if (re.test(url)) {
change();
} else {
add("&");
}
}
return url;
}
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myController">
<input type="button" value="Update" ng-click="update()">
<input type="button" value="Check" ng-click="check()">
</div>Run Code Online (Sandbox Code Playgroud)
更新:我知道$ scope.no的值何时会改变所以我认为我不需要观察者而且我不想再次调用.generateParameters为什么angular不会str像Angular绑定那样自动更新我的值?
您需要添加no您调用的方法的观察者generateQueryParameters并更改其值$scope.str
var app = angular.module("myApp", []);
app.controller("myController", function ($scope) {
$scope.no = 1;
$scope.str = "/root/get";
$scope.check = function () {
console.log($scope.str);
};
$scope.$watch('no', function() {
$scope.str = generateQueryParameters($scope.str,
"no",$scope.no);
});
$scope.update = function (data) {
$scope.no=2;
};
function generateQueryParameters(url,name,value)
{
var re = new RegExp("([?&]" + name + "=)[^&]+", "");
function add(sep) {
url += sep + name + "=" + encodeURIComponent(value);
}
function change() {
url = url.replace(re, "$1" + encodeURIComponent(value));
}
if (url.indexOf("?") === -1) {
add("?");
} else {
if (re.test(url)) {
change();
} else {
add("&");
}
}
return url;
}
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myController">
<input type="button" value="Update" ng-click="update()">
<input type="button" value="Check" ng-click="check()">
</div>Run Code Online (Sandbox Code Playgroud)
先更新再检查
| 归档时间: |
|
| 查看次数: |
493 次 |
| 最近记录: |