如何将对象或变量值从 html 脚本标记传递到 angular 的控制器
how to Pass a object or a variable value from html script tag to the controller of angular
function showMessage(message) {
console.log("message type is" +message.type);
var response = document.getElementById('response');
var p = document.createElement('p');
p.style.wordWrap = 'break-word';
p.appendChild(document.createTextNode(message));
response.appendChild(p);
}
我在 HTML 脚本标签中编写了这段代码。
我想在我的 angularjs 控制器文件中使用此消息值。我应该如何将此值从 html 获取到 controller.js
如果您必须这样做,您始终可以使用 ng-model 将隐藏输入绑定到 angular,然后使用 'showMessage' 方法加载该输入。 Angular 然后会将数据存储在 ng-model 告诉它存储的任何地方。
HTML:
<input id="myMessage" type="hidden" value="" ng-model="myMessage"/>
脚本标签:
<script>
function showMessage(message) {
console.log("message type is" +message.type);
var response = document.getElementById('response');
var p = document.createElement('p');
p.style.wordWrap = 'break-word';
p.appendChild(document.createTextNode(message));
response.appendChild(p);
// not sure what all the above is doing, but assuming message is just a string, do this...
setTimeout(function() {
document.getElementById('myMessage').value = message;
});
}
</script>
Angular代码:
.controller($scope, function($scope) {
$scope.myMessage;
var myInt = setInterval(function() {
if (document.getElementById('myMessage').value !== '') {
$scope.myMessage = document.getElementById('myMessage').value;
$scope.$apply();
clearInterval(myInt);
}
}, 150);
});
虽然这有点 hacky,但它确实有效。
However, I would do what @GandalftheWhite said. Gandalf is always
right ;)
AngularJS 框架的设计使您无需在 JavaScript 中进行 DOM 操作。而是使用指令:
HTML
<body ng-app="myApp" ng-controller="myController">
<div ng-if="messages.length">
<p ng-repeat="message in messages">{{message}}</p>
</div>
<input ng-model="m" ng-click="showMessage(m)">Enter message</input>
</body>
JS
angular.module('myApp',[]).controller('myController', function ($scope) {
var vm=$scope;
vm.messages = [];
vm.showMessage = function (m) {
vm.messages.push(m);
};
});
每次您想进行 DOM 操作时,您应该询问如何使用 Angular 指令进行操作。如果你不能用内置指令来做,问题就变成了如何用自定义指令来做。
function showMessage(message) {
console.log("message type is" +message.type);
var response = document.getElementById('response');
var p = document.createElement('p');
p.style.wordWrap = 'break-word';
p.appendChild(document.createTextNode(message));
response.appendChild(p);
}
我在 HTML 脚本标签中编写了这段代码。 我想在我的 angularjs 控制器文件中使用此消息值。我应该如何将此值从 html 获取到 controller.js
如果您必须这样做,您始终可以使用 ng-model 将隐藏输入绑定到 angular,然后使用 'showMessage' 方法加载该输入。 Angular 然后会将数据存储在 ng-model 告诉它存储的任何地方。
HTML:
<input id="myMessage" type="hidden" value="" ng-model="myMessage"/>
脚本标签:
<script>
function showMessage(message) {
console.log("message type is" +message.type);
var response = document.getElementById('response');
var p = document.createElement('p');
p.style.wordWrap = 'break-word';
p.appendChild(document.createTextNode(message));
response.appendChild(p);
// not sure what all the above is doing, but assuming message is just a string, do this...
setTimeout(function() {
document.getElementById('myMessage').value = message;
});
}
</script>
Angular代码:
.controller($scope, function($scope) {
$scope.myMessage;
var myInt = setInterval(function() {
if (document.getElementById('myMessage').value !== '') {
$scope.myMessage = document.getElementById('myMessage').value;
$scope.$apply();
clearInterval(myInt);
}
}, 150);
});
虽然这有点 hacky,但它确实有效。
However, I would do what @GandalftheWhite said. Gandalf is always right ;)
AngularJS 框架的设计使您无需在 JavaScript 中进行 DOM 操作。而是使用指令:
HTML
<body ng-app="myApp" ng-controller="myController">
<div ng-if="messages.length">
<p ng-repeat="message in messages">{{message}}</p>
</div>
<input ng-model="m" ng-click="showMessage(m)">Enter message</input>
</body>
JS
angular.module('myApp',[]).controller('myController', function ($scope) {
var vm=$scope;
vm.messages = [];
vm.showMessage = function (m) {
vm.messages.push(m);
};
});
每次您想进行 DOM 操作时,您应该询问如何使用 Angular 指令进行操作。如果你不能用内置指令来做,问题就变成了如何用自定义指令来做。