2014-02-28 49 views
1

我是新的角度世界,我有负载加载内部perticular div的HTML的功能,然后控制器得到初始化。我想让控制器内部的单个变量可用,所以想知道是否可以将该变量从控制器外部分配给范围。如何从控制器外部传递一个值到范围?

//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

我想访问的变量不是模型的一部分。它有可能在那里吗? – updev

+0

你可以发布你的html和/或创建一个plunkr或jsfiddle吗? – JamesClevenger

回答

0

是,从控制器外,你可以定位你的角度控制器中的一个元素:

var scope = angular.element("#YourElementID").scope(); 

现在你将有机会获得一切的scope(就像如果你使用$scope

+0

是的,但如何从那里分配新的变量和值? – updev

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.element(...)。范围())。我不知道你想要解决什么问题,但是从上面的代码看来,所有的逻辑都可以放在控制器中。

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> 
相关问题