Javascript 如何从控制器外部将值传递给作用域?
我是angular世界的新手,我有一个函数,它在perticular div中加载html,然后控制器得到初始化。我想在控制器内部提供单个var,因此想知道是否可以从控制器外部将该var分配给作用域Javascript 如何从控制器外部将值传递给作用域?,javascript,angularjs,function,angularjs-scope,angular-ui,Javascript,Angularjs,Function,Angularjs Scope,Angular Ui,我是angular世界的新手,我有一个函数,它在perticular div中加载html,然后控制器得到初始化。我想在控制器内部提供单个var,因此想知道是否可以从控制器外部将该var分配给作用域 //controller var cntlrs = angular.module('MyModule'); cntlrs.controller('ControllerTest', function ($scope, $http) { //want to have var availabl
//controller
var cntlrs = angular.module('MyModule');
cntlrs.controller('ControllerTest', function ($scope, $http) {
//want to have var available here from $scope
});
//accessing scope from outside
var appElmt = document.querySelector('[ng-app=MyApp]');
var $scope = angular.element(appElmt).scope();
var customer = "New Customer";
//how can I set customer value inside scope?
是的,可以从控制器外部将角度控制器内的元素作为目标:
var scope = angular.element("#YourElementID").scope();
现在您将可以访问
范围上的所有内容(就像您使用$scope
)我建议您多阅读一些文档$范围是您的模型(或者术语ViewModel更合适)
要将值输入控制器,我建议使用工厂或服务。可以在工厂中调用setCustomer,然后其他控制器可以使用getCustomer查看该值
var mod = angular.module('MyModule', []);
mod.factory("CustomerFactory", function () {
var customer;
return {
getCustomer: function () {
return custData;
}
setCustomer: function (custData) {
customer = custData;
}
}
});
mod.controller("TestController", function ($scope, $http, CustomerFactory) {
$scope.customer = CustomerFactory.getCustomer();
}
如果不在angular之外引用$scope(即从angular.element(…).scope()引用),也可能会更好。我不知道您想解决什么问题,但从上面的代码来看,所有的逻辑都可以放在控制器中。我决定这样工作,而且似乎没有问题!!它不需要很大的努力,唯一令人厌烦的是,在模板中,您需要始终使用vars.somepropertyormethod
//controller
var cntlrs = angular.module('MyModule');
cntlrs.controller('ControllerTest', function ($scope, $http) {
//want to have var available here from $scope
});
//accessing scope from outside
var appElmt = document.querySelector('[ng-app=MyApp]');
var $scope = angular.element(appElmt).scope();
var customer = "New Customer";
//how can I set customer value inside scope?
//an outside var that keeps all the vars I want in my scope
var vars = {
val1: 1,
val2: "dsfsdf",
val3: function() {return true;}
}
//and here I set the controller's scope to have ONLY vars and nothing else:
angular.module('myModule', [])
.controller('myControllerOpenToTheWorld', function($scope) {
$scope.vars = vars;
});
有了它,我可以在任何我想要的地方设置vars.anyproperty
。诀窍在于,实际值都包装在对象中,因此只要不重新分配包装vars
,就可以从外部和内部访问它:
//change val2
vars.val2 = "new value changed from outside";
在标记中,它的工作方式如下:
<div>{{vars.val1}}</div>
<div ng-if:"vars.val3()">{{vars.val2}}</div>
{{vars.val1}
{{vars.val2}}
我要访问的变量不是模型的一部分。有可能在那里吗?你能发布你的html和/或创建一个plunkr或JSFIDLE吗?是的,但是如何从那里分配新的var和值呢?