我有一个具有通用非角JS函数的实用程序文件。我试图想出一个想法,将当前的作用域注入到该文件中的函数中。我有以下功能,可以很好地与$state提供程序一起工作:
function goToState(state) {
angular.element(document).injector().invoke(function ($state) {
$state.go(state);
});
}
但同样的东西在显微镜下行不通。我还尝试将$scope转换为一个字符串,以便发送到函数:
var scopeString = JSON.stringify($scope);
但获得“将循环结构转换为JSON”
还有其他想法吗?
谢谢
发布于 2018-02-21 14:48:00
AngularJS应用程序中有许多作用域对象。如果您需要向非AngularJS代码公开一个代码,请使用$rootScope
,这实际上是唯一可以指望始终存在的代码。
angular.module("app").run("$rootScope", "$window", function($rootScope, $window) {
$window.ngRootScope = $rootScope;
});
但是,请确保在AngularJS代码之外的任何时候使用该作用域执行某些操作,并将其包装在$apply()
中。
如果你这样做:
function myNonAngularJSFunction() {
ngRootScope.someValue = 'newValue';
}
直到下一次运行摘要周期时,AngularJS才会知道这个值。
相反,这样做可以确保AngularJS立即通知和处理新的作用域值:
function myNonAngularJSFunction() {
ngRootScope.$apply(function(scope) {
scope.someValue = 'newValue';
});
}
发布于 2018-02-21 14:35:17
只要加载了脚本的函数,控制器就能够调用它们,在这种情况下,那些函数无法从HTML中访问,您就可以从控制器调用它们,并将所需的对象传递给它们,比如没有JSON.stringify的JSON.stringify。
<span ng-click="ctrlCallSpecialFunc()" >
angular.module("app",[]).controller('mainCtrl', function($scope){
$scope.ctrlCallSpecialFunc = function(){
scriptFunc($scope);
}
})
https://stackoverflow.com/questions/48916198
复制