我是角度世界的新手,我有一个函数,它在加载时在内部加载html,然后控制器初始化。我想在控制器内部提供单个var,因此想知道是否可以从控制器外部将var分配给范围。
//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?
答案 0 :(得分:1)
我建议更多地阅读角度文档。 $ 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()),也可能会更好。我不知道你要解决的是什么,但似乎从上面的代码中,所有逻辑都可以放在控制器中。
答案 1 :(得分:0)
是的,从控制器外部可以定位角度控制器内的元素:
var scope = angular.element("#YourElementID").scope();
现在您可以访问scope
上的所有内容(就像您使用$scope
一样)
答案 2 :(得分:0)
我决定这样工作,似乎没事!它不需要很大的努力,唯一无聊的部分是在模板中你需要始终使用vars.somepropertyormethod
//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>