Javascript 如何从控制器外部将值传递给作用域?

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

我是angular世界的新手,我有一个函数,它在perticular div中加载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?  

是的,可以从控制器外部将角度控制器内的元素作为目标:

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和值呢?