Angular js 解除绑定和动态绑定不起作用
Angular js unbind and bind dynamically not working
我有一个带有 ng-model 的 2 个输入和两个绑定这两个模型的元素,我希望当我单击一个按钮时它会切换绑定,我的方式是元素 1 绑定模型 2,元素 2 绑定模型 1,它工作得很好,但是当开始改变模型时如果影响这两个元素!
为了说明它,我创建了一个plunker !
如何解决这个问题?
app.js :
var app = angular.module('myApp', []);
app.controller('myController', function($scope,$compile) {
$scope.model1="1";
$scope.model2="2";
$('#click').click(function () {
$('#model1').attr('ng-bind','model2');
$('#model2').attr('ng-bind','model1');
angular.element($compile( $('#model1'))($scope));
angular.element($compile( $('#model2'))($scope));
$scope.$apply();
});
});
这是一个有效的 plunker 示例;
切勿直接在控制器中操作 DOM。通常你不会自己操纵 dom。你使用 angular 指令来做你想做的。请记住,如果您想使用 jQuery,您可能以错误的方式进行操作,并且有一种方法可以从 angular 执行它而无需调用 jQuery。
Javascript
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope,$compile) {
$scope.name = 'World';
//input1 and input2 will contain the key of the variable bind to the input.
$scope.input1 = "value1";
$scope.input2 = "value2";
$scope.model = {
value1 : 1,
value2 : 2
}
// Here is my switch function. I just switch the keys and angular will do the rest.
$scope.switch = function(){
var tmp = $scope.input1;
$scope.input1 = $scope.input2;
$scope.input2 = tmp;
}
});
HTML
<body ng-controller="MainCtrl">
<!-- Angular provide a directive called ng-click to bind function on clic for the html element -->
<button ng-click="switch()">switch</button>
<!-- Here i bind the property of an object. I'll just update the key in input1 to change which property is bind-->
<input type="text" ng-model="model[input1]" />
<input type="text" ng-model="model[input2]" />
<h5 id="model1" ng-bind="model[input1]"></h5>
<h5 id="model2" ng-bind="model[input2]"></h5>
</body>
希望对您有所帮助,如果您想进一步解释,请继续。
我有一个带有 ng-model 的 2 个输入和两个绑定这两个模型的元素,我希望当我单击一个按钮时它会切换绑定,我的方式是元素 1 绑定模型 2,元素 2 绑定模型 1,它工作得很好,但是当开始改变模型时如果影响这两个元素!
为了说明它,我创建了一个plunker !
如何解决这个问题?
app.js :
var app = angular.module('myApp', []);
app.controller('myController', function($scope,$compile) {
$scope.model1="1";
$scope.model2="2";
$('#click').click(function () {
$('#model1').attr('ng-bind','model2');
$('#model2').attr('ng-bind','model1');
angular.element($compile( $('#model1'))($scope));
angular.element($compile( $('#model2'))($scope));
$scope.$apply();
});
});
这是一个有效的 plunker 示例;
切勿直接在控制器中操作 DOM。通常你不会自己操纵 dom。你使用 angular 指令来做你想做的。请记住,如果您想使用 jQuery,您可能以错误的方式进行操作,并且有一种方法可以从 angular 执行它而无需调用 jQuery。
Javascript
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope,$compile) {
$scope.name = 'World';
//input1 and input2 will contain the key of the variable bind to the input.
$scope.input1 = "value1";
$scope.input2 = "value2";
$scope.model = {
value1 : 1,
value2 : 2
}
// Here is my switch function. I just switch the keys and angular will do the rest.
$scope.switch = function(){
var tmp = $scope.input1;
$scope.input1 = $scope.input2;
$scope.input2 = tmp;
}
});
HTML
<body ng-controller="MainCtrl">
<!-- Angular provide a directive called ng-click to bind function on clic for the html element -->
<button ng-click="switch()">switch</button>
<!-- Here i bind the property of an object. I'll just update the key in input1 to change which property is bind-->
<input type="text" ng-model="model[input1]" />
<input type="text" ng-model="model[input2]" />
<h5 id="model1" ng-bind="model[input1]"></h5>
<h5 id="model2" ng-bind="model[input2]"></h5>
</body>
希望对您有所帮助,如果您想进一步解释,请继续。