我试图将Javascript对象传递给我的AngularJS控制器并且没有运气。
我已尝试将其传递到init
函数:
<div ng-controller="GalleryController" ng-init="init(JSOBJ)">
在我的控制器方面:
$scope.init = function(_JSOBJ)
{
$scope.externalObj = _JSOBJ;
console.log("My Object.attribute : " + _JSOBJ.attribute );
};
虽然上述情况似乎无效。
或者,我尝试从我感兴趣的AngularJS控制器中提取属性,以便在内联<script>
标记中使用:
var JSOBJ.parameter = $('[ng-controller="GalleryController"]').scope().attribute ;
console.log("My Object.parameter: " + JSOBJ.attribute );
有谁能告诉我:关于这个问题的最佳做法是什么?
我没有选择重写纯Javascript对象,因为它是第三方库的一部分。
如果我需要进一步澄清并提前感谢任何指导,请告知我们。
- JohnDoe
答案 0 :(得分:4)
尝试将其设置为值:
angular.module('MyApp')
.value('JSOBJ', JSOBJ);
然后将其注入您的控制器:
angular.module('MyApp')
.controller('GalleryController', ['JSOBJ', function (JSOBJ) { ... }]);
答案 1 :(得分:4)
由于您的对象是第三方库的一部分,因此您必须以有角度的方式将其包装。
您的选择是:
directive
示例
myApp.directive('myplugin', function myPlanetDirectiveFactory() {
return {
restrict: 'E',
scope: {},
link: function($scope, $element) { $($element).myplugin() }
}
});
factory
或service
例如
myApp.service(function() {
var obj = window.MyLib()
return {
do: function() { obj.do() }
}
})
value
例如
myApp.value('planet', { name : 'Pluto' } );
constant
例如
myApp.constant('planetName', 'Greasy Giant');
参考此文档页面:https://docs.angularjs.org/guide/providers
此外,我强烈建议您阅读这个问题的答案:"Thinking in AngularJS" if I have a jQuery background?
答案 2 :(得分:1)
如果您通过全局范围(通过窗口)访问JSOBJ
,则可以直接通过window
访问它,就像在纯JavaScript中一样。
<script>
...
window.JSOBJ = {x:1};
...
</script>
选项1。
<script>
angular.module('app',[]).controller('ctrl', ['$scope', function($scope) {
$scope.someObject = window.JSOBJ;
}]);
</script>
然而,它使控制器代码无法测试。因此可以使用$window
服务
选项2。
<script>
angular.module('app',[]).controller('ctrl', ['$scope', '$window', function($scope, $window) {
$scope.someObject = $window.JSOBJ;
}]);
</script>
如果您想创建一些抽象层以使您的控制器与您获取对象的源不相关,建议定义负责获取值的服务,然后将其注入您的控制器,指令等。
选项3。
<script>
angular.module('app',[])
.service('myService', function() {
var JSOBJ = ...; // get JSOBJ from anywhere: localStorage, AJAX, window, etc.
this.getObj = function() {
return JSOBJ;
}
})
.controller('ctrl', ['$scope', 'myService', function($scope, myService) {
$scope.someObject = myService.getObj();
}]);
</script>
除此之外,对于简单值,您可以定义可以注入任何控制器,服务等的constant
或value
。
选项4。
<script>
angular.module('app',[]).
value('JSOBJ', JSOBJ).
controller('ctrl', ['$scope', 'JSOBJ', function($scope, JSOBJ) {
$scope.someObject = JSOBJ;
}]);
</script>